Comment puis-je utiliser redis avec Django?

95

J'ai entendu parler de redis-cache mais comment ça marche 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?

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

meder omuraliev
la source

Réponses:

72

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

Redis est conçu pour être un cache RAM. Il prend en charge les clés 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. Le but serait d'accélérer votre site Django. Ne commencez pas à utiliser Redis ou tout autre cache avant d'avoir besoin de la vitesse - n'optimisez pas prématurément.

Spike Gronim
la source
Mais comment vérifier que le cache sur Redis doit être mis à jour? Comparez-vous le nombre d'enregistrements ou existe-t-il un meilleur moyen?
Marconi
7
Cela se fait généralement en définissant un TTL pour la clé: redis.io/commands/ttl . Si la clé expire, vous devez accéder à la base de données. Donc, si la clé est en redis, vous l'utilisez. Notez que l'implémentation simple de ceci pose quelques problèmes: lorsqu'une clé populaire expire, vous avez en.wikipedia.org/wiki/Thundering_herd_problem , vous voulez utiliser en.wikipedia.org/wiki/Negative_cache , et votre base de données a besoin de en.wikipedia. org / wiki / Admission_control
Spike Gronim
4
Euh, eh bien, a) Redis est conçu pour être plus qu'un cache RAM - il est persistant (mais inclut des fonctionnalités pour le cache), b) c'est plus qu'un simple stockage clé-valeur - il y a des listes, des hachages, etc. avec des manipulations intégrées.
Olli
8
Honnêtement, la mise en cache des objets modèle / réponse ne relève pas d'une optimisation prématurée. Sauf si vous êtes chargé de le faire (comme sur heroku), la mise en cache ne fait pas de mal, même pour les petites applications.
vikki
1
Ce n'est pas une question de vitesse, mais de ressources. Une table en cache sera moins chère.
dman
60

Ce n'est pas parce que Redis stocke des choses en mémoire qu'il est censé être un cache. J'ai vu des gens l'utiliser comme stockage permanent de données.

Le fait qu'il puisse être utilisé comme cache est un indice qu'il est utile comme stockage haute performance. Si votre système Redis tombe en panne, vous risquez de perdre à nouveau des données qui n'ont pas été réécrites sur le disque. Il existe plusieurs moyens d'atténuer ces dangers, par exemple une réplique de secours. Si vos données sont `` essentielles à la mission '', comme si vous gérez une banque ou un magasin, Redis n'est peut-être pas le meilleur choix pour vous. Mais si vous écrivez un jeu à fort trafic avec des données en direct persistantes ou des éléments d'interaction sociale et que vous gérez la probabilité de perte de données pour être tout à fait acceptable, alors Redis pourrait valoir le coup d'œil.

Quoi qu'il en soit, le point demeure, oui, Redis peut être utilisé comme base de données.

Stefan Schubert-Peters
la source
3
Pour mon entreprise, 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 le fait que nous ne savons jamais ce qui est nécessaire à tout moment en fait un choix parfait pour les redis. De plus, une fois que vous dépassez un million de lignes de quoi que ce soit dans une base de données SQL, redis peut être une excellente ressource complémentaire pour les tests d'appartenance (par exemple, ces entités sont-elles dans ce domaine?)
David
Je ne peux m'empêcher de me demander pourquoi ma réponse qui faisait exactement le même point plusieurs mois plus tôt a été dépassée par la vôtre ... Eh bien.
ostergaard
22

Redis est essentiellement un magasin KV «en mémoire» avec des tas 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).

Lorsqu'il est combiné avec Django, le cas d'utilisation le meilleur / le plus courant de Redis est probablement de mettre en cache les «réponses» et les sessions.

Il y a un backend ici https://github.com/sebleier/django-redis-cache/ et une excellente documentation dans la documentation 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).

Ostergaard
la source
5

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

Dmitrii Mikhailov
la source
2

Redis en tant que base de données principale

Oui, vous pouvez utiliser le magasin de valeurs-clés Redis comme base de données principale. Redis stocke non seulement des paires clé-valeur, mais prend également en charge différentes structures de données telles que

  1. liste
  2. Ensemble
  3. Ensemble trié
  4. Hashs
  5. Bitmaps
  6. Hyperloglogs

Types de données Redis Document officiel

Redis est dans le magasin clé-valeur de la mémoire, vous devez donc en être conscient si une défaillance du serveur Redis se produit, vos données seront perdues.

Redis peut également conserver la documentation officielle de vérification des données.

Document officiel Redis Persistence


Redis comme cache

Oui, Redis réside entre Django et SGBDR.

Comment ça fonctionne

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

Doc officiel du framework de cache de Django


Comment utiliser Redis avec Django

Nous pouvons utiliser le client redis python redis-py pour l'application Django.

Client Redis Python Redis-py Github

Nous pouvons utiliser Django-redis pour le backend du cache django.

Django-redis s'appuie sur redis-py et a ajouté des fonctionnalités supplémentaires liées à l'application django.

Django-redis doc Github

D'autres bibliothèques existent également.


Cas d'utilisation et types de données Redis

Quelques cas d'utilisation

  • Cache de session
  • Analyse en temps réel
  • Mise en cache Web
  • Classements

Principaux cas d'utilisation de Redis par types de structure Core Data


Entreprises Big Tech utilisant Redis

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

Muhammad Faizan Fareed
la source