Servidor memcached


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 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:

emerge net-misc/memcached

Retocamos la config para indicarle la RAM a utilizar y la IP en la que escuchar:

vi /etc/conf.d/memcached

# 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:

/etc/init.d/memcached start
rc-update add memcached default

Con este simple script en python podemos comprobar que nuestro memcached funciona correctamente:

emerge dev-python/python-memcached
vi memcached.py
#! /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.

Si te ha gustado el artículo puedes invitarme a un redbull aquí.
Si tienes cualquier pregunta siempre puedes enviarme un Email o escribir en el grupo de Telegram de AlfaExploit.
Autor: kr0m -- 03/07/2014 09:16:24 -- Categoria: Sysadmin Db