Memcached es un sistema distribuido de alta performance para el cacheo de objetos en memoria, usado para incrementar la velocidad de aplicaciones web dinámicas, mejorando la carga de las bases de datos.
Es un tipo de base de datos orienda a memoria, la forma de trabajo de memcached es sencilla, se tiene un servicio que escucha en un host y un puerto específico, por default 11211, que puede almacenar cadenas de bytes (strings). De esta forma, se podria estar guardando en memoria una estructura serializada de PHP, JSP, etc, un string encodeado en formato JSON, o un documento de cualquier formato.
Desempeño
Memcached Server almacena los strings, a los cuales se les denomina ítems, en una gran tabla de hash, y los mapea según la clave que le asociemos a dicho ítem.
Esta tabla de hash adopta una estructura de porciones de memoria de tamaño variable, a los cuales se les denominada slabs, con el objetivo de optimizar la asignación del espacio de memoria.
Un dato no menor es el slab de mayor tamaño (1 Mb), siendo este por consiguiente el tamaño máximo que un ítem puede tener si quiere ser almacenado en Memcached Server
Su arquitectura escalable nos permite establecer y mantener un pool de Memcached servers, funcionalidad que bien puede ser explotada en momentos donde la cantidad de conexiones no puede ser gestionada por un único Server, en ese caso el pool optará por otro Server, balanceando la carga de conexiones que se tenga.
Protocolo
La comunicación de clientes con servidor es simple, y basada en comandos. El protocolo Memcached implementa 3 comandos de almacenamiento, con pequeñas diferencias en su funcionamiento:
- SET: Actualiza el objeto si no existía anteriormente, o lo agrega en caso contrario.
- ADD: Agrega el objeto solo si no existe.
- REPLACE: Actualiza el objeto solo si existe.
Memcached permite administrar el tiempo de vida de un objeto, indicando el “tiempo de expiración” para el mismo, en el momento de realizar una operación de almacenamiento.
Posee un comando de recuperación: GET.
Podemos eliminar un objeto mediante el comando DELETE.
Además, el protocolo implementa comandos para recuperar estadísticas, vaciar el cache, utilizar algún tipo de compresión, entre otros.
En las siguientes lineas, veremos un ejemplo simple de uso de memcached con PHP
Inicializamos y conectamos
$memcache = new Memcache; $memcache->connect('localhost', 11211) or die("No podemos conectarnos");
Creamos una estructura a cachear
$person = new stdClass; $person->nombre = "Jorge"; $person->apellido = "Rodriguez";
Almacenamos la estructura con una expiración de 10 segundos
$memcache->set("person", $person, false, 10) or die ("No podemos guardar la estructura");
Recuperamos la estructura
$result = $memcache->get("person"); echo "Estructura recuperada: \n"; print_r($result);
Memcached es una servicio muy útil que hará que nuestras aplicaciones web no tengan que esperar segundos a la base de datos ya que este tiene tiempos de respuesta por debajo del milisegundo.