/ python

Configurar redis como backend de cache en django

Redis es una base de datos no relacional de tipo llave valor, entre las estructuras de datos que ofrece podemos encontrar: strings, hashes, lists, sets, etc.

Instalar redis

OSX

brew install redis-server

Si no tienes instalado Homebrew puedes instalarlo desde aqui.

Linux

aptitude install redis-server
yum install redis-server
pacman install redis-server

Django por defecto viene con soporte para usar memcached como backend de cache, sin embargo esta configuración se puede cambiar para poder usar el backend de tu preferencia, en este caso vamos a usar redis.

Instalar dependencias

pip install redis hiredis django-redis-backend
  • redis es la libreria que nos permite interactuar con redis desde python.
  • hiredis es un parser que procesará la data que enviemos y recibamos de redis (es el recomendado a usar en django-redis-cache).
  • django-redis-cache es un paquete que nos da el soporte para usar redis como backend de cache en nuestro proyecto django

Una vez instaladas las dependencias debemos configurar nuestro proyecto django, para lo cual agregamos en nuestro archivo settings.py lo siguiente:

CACHES = {
    'default': {
        'BACKEND': 'redis_cache.RedisCache',
        'LOCATION': 'localhost:6379',
        'OPTIONS': {
            'DB': 0,
            'PASSWORD': '',
            'PARSER_CLASS': 'redis.connection.HiredisParser',
            'CONNECTION_POOL_CLASS': 'redis.BlockingConnectionPool',
            'CONNECTION_POOL_CLASS_KWARGS': {
                'max_connections': 50,
                'timeout': 20,
            }
        },
    }
}

Un punto importante es especificar con que base de datos vamos a trabajar, redis tiene disponible 16 bases de datos numeradas desde 0 hasta 15, en este caso vamos a trabajar con la base de datos 0.

Se esta usando el puerto por defecto de redis (6379) y asumiendo que el servidor de redis corre en localhost.

Con esto ya podemos usar redis como backend de cache, el uso dentro de nuestro proyecto django es totalmente transparente, es decir que solo llamamos al objeto cache de siempre from django.core.cache import cache en caso cambiemos el backend de cache el cambio se hace solo a nivel de configuración (archivo settings.py) el uso dentro de nuestro proyecto no va variar.