2009-12-02

Instalación y uso de Memcache con PHP

Tras un largo periodo de tiempo sin escribir vuelvo con unas breves indicaciones de cómo instalar y utilizar memcached desde PHP. Memcached consiste en un sistema de caché distribuido que permite guardar datos a diferentes aplicaciones en un conjunto de servidores que actúan como servidores de caché. Ofrece un sistema muy sencillo de utilizar a la vez que ligero y potente, por lo que su uso está muy extendido en todo tipo de proyectos, muchos de ellos de grandes dimensiones, como LiveJournal, Flickr, o Facebook. Memcached permite guardar cualquier tipo de datos que deseemos, como resultados de cálculos complejos, resultados de consultas de acceso a bases de datos, o incluso la información se las sesiones de los usuarios en PHP, por ejemplo.

Memcached se ejecuta en cada equipo que queremos que actúe como servidor de caché indicándole el tamaño de la memoria que queremos que utilice para ello. De esta forma el volumen total de caché disponible es la suma de la memoria asignada en todos los servidores. Una vez que los servidores están preparados las aplicaciones se comunican con ellos a través de una sencilla API que permite fundamentalmente guardar elementos en la caché, recuperarlos o borrarlos.

La instalación de memcached es realmente sencilla. En el caso de Ubuntu consiste simplemente en instalar el paquete correspondiente.

$ sudo apt-get install memcached

Tras la instalación es posible configurar diferentes parámetros como la IP o el puerto de escucha, o el tamaño de memoria asignado y otros parámetros desde el archivo de configuración /etc/memcached.conf. Tras modificar alguno de los parámetros deberemos únicamente reiniciar el servicio.

$ sudo /etc/init.d/memcached restart

Para hacer uso de la caché existen APIs para diversos lenguajes de programación. En el caso de PHP existen dos opciones diferentes con nombres similares. La primera es memcache (sin d), que es la API habitual, y la segunda, de nombre memcached, es una versión más reciente que ofrece alguna posibilidad más pero que todavía está en versión beta, por lo que utilizaremos la primera de ellas.

Ambas APIs se pueden instalar mediante pecl install, pero en el caso de Ubuntu disponemos también de un paquete específicamente preparado.

$ sudo apt-get install php5-memcache

Tras la instalación es necesario activar la extensión editando el archivo /etc/php5/conf.d/memcache.ini y descomentando la línea extension.

; uncomment the next line to enable the module
extension=memcache.so

[memcache]
memcache.dbpath="/var/lib/memcache"
memcache.maxreclevel=0
memcache.maxfiles=0
memcache.archivememlim=0
memcache.maxfilesize=0
memcache.maxratio=0

Una vez activada la extensión será necesario reiniciar el servidor web para poder comenzar a utilizarla. Podremos comprobar que se ha instalado correctamente mediante phpinfo.

Para comprobar que la instalación ha funcionado correctamente podemos crear un archivo php con el siguiente contenido.

< ? php  $memcache = new Memcache; $memcache->connect('localhost', 11211) or die ("Could not connect");

$version = $memcache->getVersion();
echo "Server's version: ".$version."
n”;

$tmp_object = new stdClass;
$tmp_object->str_attr = ‘test’;
$tmp_object->int_attr = 123;

$memcache->set(’key’, $tmp_object, false, 10) or die (”Failed to save data at the server”);
echo “Store data in the cache (data will expire in 10 seconds)
n”;

$get_result = $memcache->get(’key’);
echo “Data from the cache:
n”;

var_dump($get_result);

? >

A lo que deberemos obtener como resultado algo como lo siguiente.

Server's version: 1.2.2
Store data in the cache (data will expire in 10 seconds)
Data from the cache:
object(stdClass)#3 (2) { ["str_attr"]=> string(4) "test" ["int_attr"]=> int(123) }

Son cosas distintas y completmentarias Eaccelerator realiza un caching de los programas php para evitar que tengan que interpretarse de forma completa cada vez que se ejecutan.

Memcache por contra lo que ofrece es un servicio centralizado de cache de datos, para evitar tener que acceder por ejemplo a base de datos y recuperar información en cada ejecución.

Así pues podrías utilizar EAccelerator [http://www.eslomas.com/index.php/archives/2005/06/18/cache-scripts-php-eaccelerator/] para acelerar la ejecución de los scripts y memcache para acelerar el acceso a los datos en estos scripts.


No hay comentarios: