-
Notifications
You must be signed in to change notification settings - Fork 7
Implementación con httpmemcachedmodule
Se puede, utilizando una feature por ahora experimental, implementar la cache para ser servida directamente por Nginx con el módulo HttpMemcachedModule, esta usa la url como key final, pudiendo generar cache que levantará Nginx, sin ejecutar ningún script.
Para utilizar se necesitará utilizar la clase PageCache, hecha para cachear páginas enteras (todo el contenido) de forma natural.
Hay métodos para manejar la forma en que HybridCache encodea las keys que utilizará para los storages. En este caso en vez de utilizar sha1 como hace por defecto, se necesita utilizar una key en texto claro.
// Cargamos el autoloader de clases
require('HybridCache/lib/init.php');
use Hybrid\Cache;
use Hybrid\PageCache;
use Hybrid\storages\Memcache as MemcacheSotorage;
// Creamos el storage
$storage = new MemcacheSotorage();
// Seteamos que guarde en claro
$storage->setFormat(MemcacheSotorage::F_CLEAN);
// Agregamos el storage media
Cache::addStorageMedia( $storage );
// Creamos la instancia de PageCache
$page = new PageCache();
// Le definimos que encodee las key de forma reconocible por Nginx
$page->setKeyEncodeMethod( Cache::K_UNSERIALIZED_URL );
// Seteamos saveClean para que no guarde metadata, solo el contenido
$page->saveClean(true);
$page->run();
/* Resto del contenido */
De esta forma. la key final en Memcache va a ser la url completa.
Primero necesitaran tener instalada una versión de Nginx con dicho módulo, si necesitan una mano para compilar Nginx en Debian les recomiendo este articulo: http://exodica.gentisoft.com.ar/posts/336-compilando-nginx-en-debian.html, tambien obviamente necesitan tener un memcached corriendo.
Una vez preparado el escenario, hacemos uso de esta forma:
location / {
set $memcached_key "$host$uri";
memcached_pass localhost:11211;
default_type text/html;
error_page 404 = @fallback;
}
location @fallback {
### Y aca va el proxy_pass o el fastcgi_pass
}