сохранить документ в кеш memcache
Суть идеи такова: сохранить ресурс в виде html странички в кеш memcache средставами MODX (плагином), посредством nginx прочитать ресурс из кеша, так сказать минуя MODX… Плюсы — nginx отдает страничку практически мгновенно, сервер не тратит ресурсы…
Нам нужно два события — OnSiteRefresh и OnBeforeSaveWebPageCache. По первому событию чистить кеш, по второму сохранить ресурс в кеш.
Скелет плагина:
switch ($modx->event->name) {
case 'OnSiteRefresh':
//чистим кеш
break;
case 'OnBeforeSaveWebPageCache':
if ($modx->resource->get('cacheable') && $modx->resource->get('published') && $modx->resource->_output != '') {
$memcache = new Memcache;
$memcache->connect('localhost', 11211);
$expire = 50;//время хранения 50с
$uri = $modx->resource->get('uri');
$context = $modx->context->get('key');
$key = "$context/$uri";
$output = &$modx->resource->_output;
$time = time();
$cacheArray = array('output'=>$output, 'time'=>$time);
$tmp_object = $output;
$memcache->set($key, $tmp_object, false, $expire);
$memcache->close();
break;
}
}
Запись в кеш:
$memcache = new Memcache;
$memcache->connect('localhost', 11211);//подключаемся к memcache
$expire = 50;//время хранения 5с кеша
$tmp = "<h1>привет</h1>";
$memcache->set('key', $tmp, false, $expire);//записываем по ключу значение в кеш
$memcache->close();//закрываем подключение
Получить значение (страничку) из кеша пока на время проб, просто снипетом:
$memcache = new Memcache;
$memcache->connect('localhost', 11211) or die ("Не могу подключиться");
$get_result = $memcache->get('key');
echo "Данные из кеша:".$get_result."
\n";
$memcache->close();
Ключ формировать по следующему шаблону:
site_name:context:uri
Время хранения кеша пока не знаю, возможно алгоритм какой нибудь придумать, пока можно выставить ручками.
p.s. хотел донести до вас основную мысль, интересно выслушать ваше мнение… я не программист и возможно это вообще бредовая идея… Жду ваши коментарии…