Cómo usar Memcached en nuestro código PHP

18 Nov

Memcached es un sistema que se ejecuta en modo servicio que almacena en memoria RAM cualquier dato que se le pida. Las llamadas se hacen por medio de sus librerías en los diferentes lenguajes de programación que soporta y el almacenamiento lo realiza por medio de asociaciones de series de cadenas hash. De esta manera, si yo tengo en mi código por ejemplo un listado completo de provincias que voy a mostrar a los usuarios en una página, en vez de estar todas las veces sacándolas de la Base de Datos, las saco una sola vez -la primera vez que se pidan- y las guardo posteriormente en Memcache. La siguiente vez que me las pidan, miro primero si las tengo en Memcached y las muestro directamente desde él.Para poder usarlo, suponemos que tenemos ya un servicio memcached instalado y que queremos asociar nuestro código a él. Esto lo realizamos cargando primero las librerías memcached dentro de nuestro PHP:

$ pecl install memcache

En nuestro fichero de php.ini insertamos la línea -si no lo ha hecho ya pecl:

extension=memcache.so

Una vez instaladas las librerías, podemos llamar a la clase Memcache desde dentro del código. Lo primero que tenemos que hacer es declarar la clase:


$memcache = new Memcache();
$memcache->pconnect('localhost',11211);

Aqui supongo que el servicio Memcache está situado en el mismo servidor. Según la documentación de Memcache, el puerto por defecto es el 11211, por lo que usaremos el mismo.

Ahora que estamos conectados, sólo queda usarlo. Por ejemplo, aquí tengo una función que me devuelve las provincias de España:


function get_provincias($pais) {
$prov = $memcache->get("PROV_".$pais);
if ( $prov === false) {
// No está en memcache, así que las traigo de la BBDD y las meto en
// memcache para la siguiente vez...
$prov = coge_de_base_datos_provincias($pais);
$memcache->set("PROV_".$pais,$prov,0,0);
}
return $prov;
}

Todos los hilos de PHP que corran podrán acceder a la información que otros hilos han dejado dentro del servicio. Por lo que hay que tener cuidado con los accesos y la información que se pueda introducir.

Como podéis observar, es cuestión de mantener una lógica lo sufientemente sencilla como para no confundirse a la hora de manejar los datos. Otro detalle que habréis notado es que he usado dos métodos de la clase Memcache. En realidad los que suelo usar son estos dos nada más. Existen otros muy útiles también como set(), replace(), invalidate().

Este último existe porque tú también puedes definir a Memcache el tiempo máximo que quieres que esa entrada se encuentre en la memoria. Así se pueden mantener datos temporales en memcache como información de la sesión de un usuario. Este valor está definido en segundos por el cuarto parámetro de la función set(). Pero os remito a la documentación que hay aquí para profundizar más en este aspecto.

Memcached es una herramienta muy útil que hará que nuestras aplicaciones web no tengan que esperar esos 10ms a la base de datos ya que este servicio tiene tiempos de respuesta por debajo del milisegundo en muchas ocasiones.

7 comentarios to “Cómo usar Memcached en nuestro código PHP”

  1. eddy Mie 13, agosto 2008 a 08:03 #

    Hey! bonito how-to.

    * Te faltó una n en $memcache->pconnect …
    * Antes de usar el servicio, debes iniciarlo con $ memcache -d (En mi caso lo instalé a partir de los empaquetados de debian)

    Un abrazo y gracias

  2. joax Jue 14, agosto 2008 a 04:32 #

    Hola Eddy,

    Este caso solo supone al cliente, por lo que lo que dices debe ser ejecutado en el servidor que contenga la instancia de Memcached. Al hacer pecl install memcache lo que haces es instalar las extensiones de PHP para poder usar PHP como cliente de un servidor Memcache.

    Próximamente intentaré hacer un How-to para instalar un servidor de Memcache.

    Muchas gracias por la corrección! 😉

  3. torneofutbol8 Vie 5, agosto 2011 a 03:16 #

    Entonces Memcached sirve para tablas que No hagan muchos updates, como la tabla de provincias.

    • joax Vie 5, agosto 2011 a 03:52 #

      En realidad sirve también para aquellas tablas que modificamos continuamente. Podemos poner memcache como una capa de caché para los datos intermedia, sobretodo si lo que tenemos detrás es un cluster de bases de datos, donde la caché individual de cada base de datos pierde su efectividad -en concreto el query cache.

  4. jorge Mie 22, agosto 2012 a 08:01 #

    Hola. Tengo una consulta. cual es máximo que puede medir una clave?
    pregunto porque e oído decir que es de solo 252 bytes ¿es cierto?
    me interesa esta tecnología, más que nada porque se ha hablado mucho sobre redis, pero su soporte aun no parece tan sólido :S

  5. almeis Jue 18, septiembre 2014 a 07:31 #

    Reblogueó esto en PASIÓN PC | BLOG DE SISTEMASy comentado:
    muy bueno

Trackbacks/Pingbacks

  1. Instalar y activar modulo memcache para PHP en Ubuntu « Sonido Libre - Mar 29, abril 2008

    […] futuros posts, o busca en google: “como usar memcahe” y te arrojará varios resultados (como este), si no usa más la imaginación, […]

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: