2010-09-27 4 views
84

J'ai entendu parler de redis-cache mais comment cela fonctionne-t-il exactement? Est-il utilisé comme couche entre django et mes rdbms, en mettant en cache les requêtes rdbms d'une manière ou d'une autre?Comment utiliser redis avec Django?

Ou est-il supposé être utilisé directement comme base de données? Ce dont je doute, puisque cette page github ne couvre pas les détails de connexion, aucune configuration .. vous dit juste de définir une propriété de configuration.

Répondre

64

Ce module Python pour Redis a un exemple d'utilisation claire dans le readme: http://github.com/andymccurdy/redis-py

Redis est conçu pour être un cache de RAM. Il prend en charge les commandes GET et SET de base, ainsi que le stockage de collections telles que les dictionnaires. Vous pouvez mettre en cache les requêtes RDBMS en stockant leur sortie dans Redis. L'objectif serait d'accélérer votre site Django. Ne commencez pas à utiliser Redis ou toute autre mémoire cache tant que vous n'avez pas besoin de la vitesse - ne l'optimisez pas prématurément.

+0

Mais comment vérifiez-vous que le cache sur Redis doit être mis à jour? Comparez-vous le nombre d'enregistrements ou y a-t-il un meilleur moyen? – Marconi

+7

Cela se fait généralement en définissant un TTL pour la clé: http://redis.io/commands/ttl. Si la clé expire, vous devez aller à la base de données. Donc, si la clé est en rouge, alors vous l'utilisez. Notez que la simple implémentation de ceci pose quelques problèmes: quand une clé populaire expire vous avez http://en.wikipedia.org/wiki/Thundering_herd_problem, vous voulez utiliser http://en.wikipedia.org/wiki/Negative_cache, et votre DB a besoin http://en.wikipedia.org/wiki/Admission_control –

+0

Pourriez-vous définir "compatible API"? Le protocole est certainement différent. Pour citer l'auteur de Redis «Fondamentalement dans le protocole memcached la longueur de la charge utile était l'un des arguments séparés par un espace, tandis que dans le protocole Redis est à décalage fixe (il y a juste un caractère" $ ")» (Source: http: //antirez.com/post/redis-memcached-benchmark.html) Cependant, il est vrai que puisque les deux sont clé/valeur magasin, il devrait être assez simple d'adapter le code en utilisant Memcached à l'aide de Redis à la place. Ma meilleure idée est que vous vouliez dire "vous pouvez remplacer un module/classe par un autre", n'est-ce pas? – jpetazzo

18

Redis est essentiellement un magasin KV «en mémoire» avec beaucoup de cloches et de sifflets. C'est extrêmement flexible. Vous pouvez l'utiliser comme un magasin temporaire, comme un cache, ou un magasin permanent, comme une base de données (avec des mises en garde comme mentionné dans d'autres réponses). Combiné avec Django, le meilleur/le plus commun des cas d'utilisation de Redis est probablement de mettre en cache les 'réponses'.

Il y a un backend ici https://github.com/sebleier/django-redis-cache/ et une excellente documentation dans les docs Django ici: https://docs.djangoproject.com/en/1.3/topics/cache/.

J'ai récemment commencé à utiliser https://github.com/erussell/django-redis-status pour surveiller mon cache - fonctionne un charme. (Configurez maxmemory sur redis ou les résultats ne sont pas très utiles).

58

Ce n'est pas parce que Redis stocke des éléments en mémoire qu'il est censé être un cache. J'ai vu des gens l'utiliser comme un magasin persistant pour les données.

Qu'il peut être utilisé comme cache est un indice qu'il est utile en tant que stockage haute performance. Si votre système Redis tombe en panne, vous risquez de perdre des données qui n'ont pas été réécrites sur le disque. Il existe des moyens d'atténuer ces dangers, par ex. une réplique hot-standby. Si vos données sont «critiques», comme si vous exploitez une banque ou un magasin, Redis n'est peut-être pas le meilleur choix pour vous. Mais si vous écrivez un jeu très fréquenté avec des données persistantes ou des interactions sociales et que vous gérez la probabilité de perte de données, alors Redis mérite peut-être un coup d'œil.

De toute façon, le point demeure, oui, Redis peut être utilisé comme base de données.

+3

Pour ma société, nous utilisons Redis pour stocker les résumés et les produits générés par Cassandra & Postgres. La quantité de ces produits (plusieurs milliards), la fréquence à laquelle ils doivent être changés, et que nous ne savons jamais ce dont nous avons besoin à tout moment en font un choix parfait pour les redis. De plus, une fois que vous avez dépassé un million de lignes dans une base de données SQL, redis peut être une excellente ressource complémentaire pour les tests d'adhésion (ex: ces entités dans ce domaine?) – David

+0

Je ne peux m'empêcher de me demander pourquoi ma réponse point plusieurs mois plus tôt a été dépassé par le vôtre ... Oh bien. – ostergaard

4

Vous pouvez également utiliser Redis en tant que file d'attente pour les tâches distribuées dans votre application Django. Vous pouvez l'utiliser comme un courtier de messages pour Celery ou Python RQ.

Questions connexes