Memcached es un sistema de almacenamiento de objetos en RAM, es muy utilizado como sistema de cache en servidores web evitando asà el acceso a disco ya que los datos están cacheados en ram, sus principales caracteristicas son, Clave/Valor Máximo 250 carácteres como clave y 1MB como valor, TTL Tiempo de expiración de la clave, pasado este tiempo la clave es eliminada, si la RAM asignada a memcached es ocupada en su totalidad los valores mas antiguos serán eliminados de forma automática.
NO persistente Los datos se almacenan en RAM y no se vuelcan nunca a disco.
Para instalarlo es tan sencillo como:
Retocamos la config para indicarle la RAM a utilizar y la IP en la que escuchar:
# memcached config file
MEMCACHED_BINARY="/usr/bin/memcached"
# Specify memory usage in megabytes (do not use letters)
# 64MB is default
MEMUSAGE="500"
# User to run as
MEMCACHED_RUNAS="memcached"
# Specify maximum number of concurrent connections
# 1024 is default
MAXCONN="1024"
# Listen for connections on what address?
# If this is empty, memcached will listen on 0.0.0.0
# be sure you have a firewall in place!
LISTENON="A.B.C.D"
# Listen for connections on what port?
PORT="11211"
# Listen for UDP connecitons on what port? 0 means turn off UDP
UDPPORT="${PORT}"
# PID file location
# '-${PORT}.${CONF}.pid' will be appended to this!
# You do not normally need to change this.
PIDBASE="/var/run/memcached/memcached"
# Other Options
MISC_OPTS=""
NOTA: Si el código que consulte memcached va a estar en el mismo equipo que memcached recomiendo bindear memcached a la loopback y utilizar el fichero de socket para conectar de este modo además de ser mas seguro será mas eficiente ;)
MISC_OPTS="-s /var/run/memcached/memcached.sock -a 755"
Si por el contrario va a ser un servidor independiente será necesario asignar reglas de iptables ya que memcached no soporta ningún tipo de autenticación.
Arrancamos el servicio y lo añadimos al runlevel:
rc-update add memcached default
Con este simple script en python podemos comprobar que nuestro memcached funciona correctamente:
#! /usr/bin/python
import memcache
import time
s = memcache.Client(["A.B.C.D:11211"])
value=0
print "--------------------------------"
while True:
print "Asignando Valor: " + str(value)
s.set("AA", value, time=5)
#time.sleep(6)
value2 = s.get("AA")
print "Value: " + str(value2)
if (value == value2):
print "++ Values match"
else:
print "++ Values DONT MATCH"
value=value + 1
print "--------------------------------"
time.sleep(2)
Si descomentamos la lÃnea time.sleep(6) podremos ver como la key ha caducado cuando la consultamos.