Volcado del contenido de memcached sin utilizar telnet

Creo que es la forma más sencilla de monitorizar memcached, permite visualizar el contenido de memcached

echo -e ‘lru_crawler metadump all’ | nc <IP> <PUERTO>

Lo que hacemos es utilizar Netcat o nc, es una conocida herramienta para el análisis de red, para conectarnos al puerto de memcached. Y echo -e que permite  la interpretación de escapes de barra invertida.

Anuncios

Cómo hacer un volcado de información toda la información en memcached

A partir de la versión Memcached 1.4.31, se añade una nueva funcionalidad que permite dump de todosl los metadata de un slab class particular, una lista de slab clases o todos los slabs. Para poder hacer esto existe el comando lru_crawler metadump [all|1|2|3], para ejecutarlo desde el telnet.

https://github.com/memcached/memcached/pull/193

Para poder redireccionar la salida a un fichero hemos encontrado la opción de utilizar el comando tee:

 

telnet  ip puerto | tee -a log.log

#Almacenamos la clave.

set key 0 900 4

STORED

#Sacamos toda la información que está en la mmechached

lru_crawler metadump all

key=key exp=1483978211 la=1483977314 cas=1 fetch=no

quit

 

 

Caducidad de los datos en memcached

Hay dos tipo de caducidad de datos en memcached, uno porque no hay suficiente espacio para almacenar un nuevo valor, lo cual implica que memcached hará sitio utilizando el algoritmo LRU, como explicamos anteriormente,

Se puede cambiar este comportamiento iniciando memcached con la opción –M. Está opción fuerza a memcached a devolver un error cuando se quede sin memoria en vez de borrar los datos más antiguos.

El segundo mecanismo de caducidad de datos es un mecanismo explicito que puedes utilizar cuando insertas un valor en la cache o cuando borras un elemento de la esta-. Esto permite asegurarnos de cuando recuperemos un dato de la cache no está obsoleto y cumple nuestros requisitos.

El mecanismo de caducidad es el siguiente,  cuando tu solicitas un dato memcached lo compara con el momento actual y ve si ha caducado, si no ha caducado lo devuelve , si ha caducado lo borra. A nivel de las trazas de mecached se ve algo así:

FOUND KEY adios -nuked by expire – Lo encuentra y como está caducado lo borra.

Y por último se puede utilizar el comando delete para eliminar uno de los valores de la cache.

Cómo obtener un cachedump de los almacena memcached

pero que puede ser útil para ver que tenemos en memoria.

Desde una conexión telnet:

Ejecutar stats cachedump <slabs_id> <limit>

Obtenemos la información de un slab determinado, si queremos ontener toda la información del slab utilizaremos limit a 0. Si no se indica limite puede volcar demasiada información.

stats cachedump 1 0
ITEM estoy [4 b; 1414759880 s]                                                              ITEM adios [4 b; 1414759738 s]                                                              ITEM hola [4 b; 1414759649 s]                                                               ITEM key [4 b; 1414759490 s]

La salida de este comando es valor de la llave, el tamaño  y expiration_timestamp en segundos.

Para entender el timestamp utilizaremos el comando stats del servidor:

Si el timestamp es igual (stat.time – stat.uptime) el ítem no vence nunca.

stats                                                                                       STAT pid 27469                                                                              STAT uptime 12022                                                                           STAT time 1414759586                                                                        STAT version 1.4.20

Memcached algoritmo LRU

Antes de iniciar el proceso de memcached se le tiene que indicar cuanta memoria tiene que utilizar. Pero qué pasa si nosotros ocupamos toda la memoria que le hemos indicado a memcached que puede utilizar. ¿Qué pasa cuando queremos añadir más datos?.

Memcached borrará el dato más antiguo para hacer sitio a los nuevos datos. El dato que será borrado lo elegira memcached en function del algoritmo LRU: Last Recently Used, o sea que borra el dato que no ha sido utilizado durante más tiempo.

Iternamete todos los objetos tiene un contador, Este contador almacena un timestamp. Cada vez que se crea un nuevo objeto, el contador se actualiza con la hora del momento. Siempre que memcached necestia borrar un objeto para hacer espacio para un nuevo, busca el contador más antiguo. El objeto que no ha sido recuperado o que fue recuperado hace más tiempo (y que porbablemante no se necesita tanto). Recordar que este algoritmo lo utiliza por slab-class, no por el total de la memoria.

Encontré este enlace que me pareció muy interesante.

http://work.tinou.com/2011/04/memcached-for-dummies.html

Pequeña introdución sobre Memcahed

Memcahed es una cache simple y escalable que almacena datos y objetos en RAM para un rápido acceso de las aplicaciones. Para utilizarlo se debe ejecutar el comando memcache en uno o más servidores y utilizar la cache compartida para almacenar objetos. Las ventajas que tiene la utilización de memcached son:

  • La información se almacena en RAM, lo que permite un rápido acceso a ella.
  • No tiene restricciones de tipos de datos se pueden almacenar estructuras complejas, documentos, imagines o una mezcla de cosas. La única restricción es el tamaño hasta 1 mega.
  • En memcached se tiene que almacenar información temporal o de solo lectura que no tiene persistencia. Normalmente la aplicación lee de memcached y si no se encuentra ahí se acude a una base de datos, donde la lee y la sube a memcached para futuras búsquedas.

Memchached consiste en dos componentes un memcache servidor y memcache cliente.

Es una base de datos tipo Key –Value