function foo()
{
// проверяем, что процесса перегенерации кэша ещё нет (предполагается что если нужно перегенерировать кеш - то записи в memchached уже нет)
if (!checkExistProcess('key')&&!isnull($memcache->get('key'))) {
// отмечаем, что процесс перегенерации кэша пошёл
$memcache->set('key', null, 10 ); // время жизни этого ключа должно быть маленьким, но не меньше худшего времени генерации (если будет фейл, чтобы ожидающие процессы не ждали вечно)
$data = getdatafromDb();
// сохраним кеш это так же отметит окончание генерации
$memcache->set('key', $data, 60 * 60);
} else {
// процесс есть, ждём, пока завершится (тут так же можно продумать условие окончания ожидания перегенерации кеша, но времени жизни пометки более чем достаточно)
while(checkExistProcess('key')&&isnull($memcache->get('key') )){
time_nanosleep(0, 100000000);
};
$data = $memcache->get('key');
}
return $data;
}
Протокол собственный.
адрес ВПН сервера будет другима это вопрос не ко мне а к вашему провайдеру vpn, либо экспериментально определи список адресов или даже целую подсеть
использовать в качестве буфера лучше ssd, он даст больше гибкости, даже если будете смотреть ролики старые, с hdd архива, то пока он тормозит, ssd диск продолжит работать без задержек (до тех пор пока будет хватать его размера, т.е. в том случае время, которое будет просматриваться ролик с hdd равно времени, сколько ssd вместит данных, даже больше, ведь не в ноль же скорость упадет
ssd диск выбирать по скорости в худшем (тестировать с БОЛЬШИМ объемом тест файла, желательно после полной записи на весь объем диска, так как в этом случае скорость должна кратно упасть от 'паспортных'), так как работая буфером видеоданные будут писаться и одновременно такой же объем считываться с него, т.е. двойная нагрузка (но запись обычно больше грузит устройство), интерфейс подключения не важен, так как по вашей задаче вы не упираетесь в лимиты даже SATA.