2010-09-27 29 views
84

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

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

Respuesta

64

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

Redis está diseñado para ser un caché de memoria RAM. Admite GET básico y SET de claves más el almacenamiento de colecciones como diccionarios. Puede almacenar en caché las consultas de RDBMS almacenando su salida en Redis. El objetivo sería acelerar tu sitio Django. No comience a usar Redis u otra caché hasta que necesite la velocidad; no optimice prematuramente.

+0

Pero, ¿cómo se comprueba que la memoria caché en redis necesita una actualización? ¿Comparas el recuento de registros o hay una mejor manera? – Marconi

+7

Esto generalmente se hace configurando un TTL para la clave: http://redis.io/commands/ttl. Si la llave expira, debe ir a la base de datos. Entonces, si la clave está en redis, entonces la usa. Tenga en cuenta que la implementación simple de esto causa algunos problemas: cuando una clave popular caduca tiene http://en.wikipedia.org/wiki/Thundering_herd_problem, desea utilizar http://en.wikipedia.org/wiki/Negative_cache, y su base de datos necesita http://en.wikipedia.org/wiki/Admission_control –

+0

¿Podría definir "API compatible"? El protocolo es ciertamente diferente. Para citar el autor de Redis "Básicamente en el protocolo de memoría, la longitud de la carga fue uno de los argumentos separados por espacio, mientras que en el protocolo de Redis está en compensación fija (solo hay un carácter" $ "antes)» (Fuente: http: //antirez.com/post/redis-memcached-benchmark.html) Sin embargo, es cierto que, dado que ambos son clave/valor de almacenamiento, debería ser bastante sencillo adaptar el código utilizando Memcached para usar Redis en su lugar. Mi mejor suposición es que quería decir "puede sustituir un módulo/clase por otro", ¿verdad? – jpetazzo

18

Redis es básicamente una tienda KV 'en memoria' con un montón de campanas y silbatos. 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 de los casos/uso más común para Redis es, probablemente, para almacenar en caché 'respuestas'.

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

recientemente he empezado a utilizar para monitorear mi https://github.com/erussell/django-redis-status caché - funciona a las mil maravillas. (Configure maxmemory en redis o los resultados no son tan útiles).

58

El hecho de que las tiendas Redis cosas en memoria no significa que está destinado a ser una memoria caché. He visto personas que lo utilizan como una tienda persistente de datos.

que puede ser utilizado como una memoria caché es un indicio de que es útil como un almacenamiento de alto rendimiento. Si su sistema Redis falla, puede perder datos que no se han vuelto a escribir en el disco. Hay algunas maneras de mitigar tales peligros, p. una réplica en espera activa. Si sus datos son 'críticos para la misión', como si manejara un banco o una tienda, Redis podría no ser la mejor opción para usted. Pero si escribes un juego de alto tráfico con datos en vivo persistentes o algunas cosas de interacción social y gestionas la probabilidad de que la pérdida de datos sea bastante aceptable, entonces Redis podría merecer la pena.

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

+3

Para mi empresa, utilizamos Redis para almacenar resúmenes y productos generados por Cassandra y Postgres. La cantidad de estos productos (varios miles de millones), la frecuencia con la que deben cambiarse y que nunca sabemos qué se necesita en cualquier momento los hace perfectos para redis. Además, una vez que supera más de un millón de filas en cualquier SQL db, redis puede ser un excelente recurso complementario para las pruebas de membresía (p. Ej. ¿Están estas entidades en este dominio?) – David

+0

No puedo evitar preguntar por qué mi respuesta hizo exactamente lo mismo varios meses antes fue superado por el tuyo ... Oh bueno. – ostergaard

4

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