¿Cómo puedo usar redis con Django?

95

He oído hablar de redis-cache, pero ¿cómo funciona exactamente? ¿Se usa como una capa entre django y mis rdbms, almacenando en caché las consultas de rdbms de alguna manera?

¿O se supone que debe usarse directamente como base de datos? Lo cual dudo, ya que esa página de github no cubre ningún detalle de inicio de sesión, no hay configuración ... solo te dice que establezcas alguna propiedad de configuración.

meder omuraliev
fuente

Respuestas:

72

Este módulo de Python para Redis tiene un ejemplo de uso claro en el archivo Léame: http://github.com/andymccurdy/redis-py

Redis está diseñado para ser un caché de RAM. Es compatible con GET y SET de claves más el almacenamiento de colecciones como diccionarios. Puede almacenar en caché las consultas RDBMS almacenando su salida en Redis. El objetivo sería acelerar su sitio Django. No empiece a utilizar Redis ni ningún otro caché hasta que necesite la velocidad; no lo optimice prematuramente.

Spike Gronim
fuente
Pero, ¿cómo se comprueba que es necesario actualizar la caché en redis? ¿Compara el recuento de registros o hay una mejor manera?
Marconi
7
Esto generalmente se hace configurando un TTL para la clave: redis.io/commands/ttl . Si la clave caduca, debe ir a la base de datos. Entonces, si la clave está en redis, entonces úsala. Tenga en cuenta que la implementación simple de esto causa algunos problemas: cuando una clave popular caduca, tiene en.wikipedia.org/wiki/Thundering_herd_problem , desea usar en.wikipedia.org/wiki/Negative_cache , y su base de datos necesita en.wikipedia. org / wiki / Admission_control
Spike Gronim
4
Umm, bueno, a) Redis está diseñado para ser más que una caché de RAM: es persistente (pero incluye funciones para la caché), b) es más que un simple almacenamiento de valores clave: hay listas, hashsets, etc.con manipulaciones integradas.
Olli
8
Honestamente, el almacenamiento en caché de objetos de modelo / respuesta no se incluye en la optimización prematura. A menos que le cobren por hacerlo (como en heroku), no está de más almacenar en caché incluso para aplicaciones pequeñas.
vikki
1
No se trata de velocidad, se trata de recursos. Una tabla en caché será menos costosa.
dman
60

El hecho de que Redis almacene cosas en la memoria no significa que esté destinado a ser un caché. He visto a personas que lo utilizan como un almacén persistente de datos.

El hecho de que se pueda usar como caché es una pista de que es útil como almacenamiento de alto rendimiento. Si su sistema Redis deja de funcionar, es posible que pierda datos que no se hayan vuelto a escribir en el disco. Hay algunas formas de mitigar estos peligros, por ejemplo, una réplica en espera. Si sus datos son 'de misión crítica', como si administra un banco o una tienda, Redis podría no ser la mejor opción para usted. Pero si escribe un juego de alto tráfico con datos en vivo persistentes o algunas cosas de interacción social y administra la probabilidad de pérdida de datos para que sea bastante aceptable, entonces Redis puede valer la pena echarle un vistazo.

De todos modos, el punto sigue siendo, sí, Redis se puede usar como base de datos.

Stefan Schubert-Peters
fuente
3
Para mi empresa, utilizamos Redis para almacenar resúmenes y productos generados a partir de Cassandra & Postgres. La cantidad de estos productos (varios miles de millones), la frecuencia con la que deben cambiarse y el hecho de que nunca sepamos lo que se necesita en ningún momento los convierte en una opción perfecta para Redis. Además, una vez que supere un millón de filas de cualquier cosa en una base de datos SQL, redis puede ser un gran recurso complementario para las pruebas de membresía (por ejemplo, ¿están estas entidades en este dominio?)
David
No puedo evitar preguntarme por qué mi respuesta, que hacía exactamente el mismo punto varios meses antes, fue superada por la suya ... Oh, bueno.
ostergaard
22

Redis es básicamente una tienda KV 'en memoria' con un montón de campanas y silbidos. Es extremadamente flexible. Puede usarlo como un almacén temporal, como un caché, o un almacén permanente, como una base de datos (con advertencias como se menciona en otras respuestas).

Cuando se combina con Django, el mejor / más común caso de uso de Redis es probablemente almacenar en caché las 'respuestas' y las sesiones.

Hay un backend aquí https://github.com/sebleier/django-redis-cache/ y una excelente documentación en los documentos de Django aquí: https://docs.djangoproject.com/en/1.3/topics/cache/ .

Recientemente comencé a usar https://github.com/erussell/django-redis-status para monitorear mi caché, funciona de maravilla. (Configure maxmemory en redis o los resultados no serán tan útiles).

Ostergaard
fuente
5

También puede usar Redis como una cola para tareas distribuidas en su aplicación Django. Puede usarlo como agente de mensajes para Celery o Python RQ .

Dmitrii Mikhailov
fuente
2

Redis como base de datos primaria

Sí, puede utilizar el almacén de valores-clave de Redis como base de datos principal. Redis no solo almacena pares clave-valor, sino que también admite diferentes estructuras de datos como

  1. Lista
  2. Conjunto
  3. Conjunto ordenado
  4. Hashes
  5. Mapas de bits
  6. Hyperloglogs

Tipos de datos de Redis Documento oficial

Redis está en el almacén de valores clave de la memoria, por lo que debe saberlo si se produce una falla en el servidor Redis, sus datos se perderán.

Redis también puede conservar el documento oficial de verificación de datos.

Documento oficial de Redis Persistence


Redis como caché

Sí, Redis reside entre Django y RDBMS.

Cómo funciona

given a URL, try finding that page in the cache if the page is in the cache: return the cached page else: generate the page save the generated page in the cache (for next time) return the generated page

Documento oficial del marco de caché de Django


¿Cómo se puede utilizar Redis con Django?

Podemos usar el cliente redis python redis-py para la aplicación Django.

Cliente de redis python redis-py Github

Podemos usar Django-redis para el backend de caché de django.

Django-redis se basa en redis-py y agregó características adicionales relacionadas con la aplicación django.

Django-redis doc Github

También existen otras bibliotecas.


Casos de uso y tipos de datos de Redis

Algunos casos de uso

  • Caché de sesión
  • Analítica en tiempo real
  • Almacenamiento en caché web
  • Tablas de clasificación

Principales casos de uso de Redis por tipos de estructura de datos principales


Grandes empresas de tecnología que utilizan Redis

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

Muhammad Faizan Fareed
fuente