0

Usando Redis como manejador de cache y sesiones en Django

Redis es un contenedor de datos en memoria mapeados por llave-valor, algo muy parecido a Memcached, solo que muy superior en muchos aspectos. Debido a que redis mantiene todos sus datos en memoria, guardar y recuperar registros en el es muy rápido, y es esto lo que lo convierte en una muy buena solución para manejar los datos temporales de la aplicación, como el caché de las páginas cargadas y las sesiones de usuarios.

En el sitio de PythonBC usamos Redis como la solución a este problema, es nuestro manejador de cache y sesiones por defecto, aqui les mostrare paso a paso como configurar Redis como un backend similar en sus aplicaciones.

Prerrequisitos

Asumo que ustedes ya tienen su aplicación Django configurada y corriendo en un entorno virtual local con virtualenv, si no saben como hacer esto, pueden ver mi artículo anterior donde lo explico aquí.

Instalando Redis

Para instalar Redis sobre entornos basados en Debian solo tenemos que usar el comando clásico.

sudo apt-get install redis-server

Si utiliza fedora como base, el comando es similar con yum. Para verificar que Redis esta corriendo en nuestro servidor ejecutamos el siguiente comando que debería darnos la versión actual de Redis.

redis-server --version

Configurando Redis para que trabaje con contraseña

Por defecto Redis trabajará con el protocolo TCP en forma local detrás del puerto 6379, bien podríamos trabajar con este puerto sin problemas, pero aun nos falta agregar un grado de seguridad a Redis, me refiero a ponerle una contraseña.

Para esto solo tenemos que editar el archivo de configuración de Redis.

/etc/redis/redis.conf

En el cual debemos buscar la línea:

# requirepass foobared

Aqui solo tenemos que descomentar la línea y cambiar la palabra “foobared” por un password seguro, dejandolo mas o menos así:

requirepass <password-seguro-genera-uno-mejor>

Después de realizar estos cambios reiniciamos el servidor Redis.

sudo service redis-server restart

Podemos verificar que redis esta funcionando con el siguiente comando.

redis-cli -a <tu-password-aqui> ping

Esto nos debería devolver el mensaje PONG.

Por razones de seguridad es preferible que generes un password con algún generador aleatorio de por lo menos 30 caracteres, y recuerda no ponerlo en ningun archivo publico, ya que esto es prácticamente el password a una base de datos que maneja información delicada.

Es hora de Python con Redis

Bien, ya que tenemos el servidor de Redis corriendo bien en nuestro servidor, lo que nos queda es preparar la configuración del entorno de producción de nuestro proyecto Django para que trabaje con Redis. Y para ello lo primero que tenemos que hacer es agregar los paquetes “redis” y “django-redis-cache” a nuestro archivo de requirements.txt, ya que son requeridos para trabajar con Redis desde Django.

Lo que sigue es cambiar la siguiente configuración en el settings de producción.

CACHES = {
   'default': {
       'BACKEND': 'redis_cache.RedisCache',
       'LOCATION': '127.0.0.1:6379',
       'OPTIONS': {
           'DB': 1,
           'PASSWORD': <password-de-redis>
       },
   },
}

En donde le indicamos a Django que utilice como backend de cache el módulo de Redis, asi como también le especificamos la configuración para conectarse al servidor local.

Ahora puedes reiniciar la aplicación Django y esta debera estar trabajando con Redis sin ningún problema.

Si quieren saber mas acerca de como utilizar cache dentro de un proyecto Django, como aprovecharlo en las vistas, y que metodos hay para esto, les recomiendo echar un vistazo a la documentación oficial de django.

Espero que este post les ayude a entender cómo aprovechar Redis desde nuestra aplicación Django, para cualquier duda, queja o sugerencia estaré al pendiente de los comentarios.

Jesus Anaya - Programador de python y django con un gusto obsesivo por las series de television.

Comentarios

Pública un comentario