Wie kann ich Redis mit Django verwenden?

95

Ich habe von Redis-Cache gehört, aber wie genau funktioniert es? Wird es als Ebene zwischen django und meinen rdbms verwendet, indem die rdbms-Abfragen irgendwie zwischengespeichert werden?

Oder soll es direkt als Datenbank verwendet werden? Was ich bezweifle, da diese Github-Seite keine Anmeldedaten enthält, kein Setup. Sie werden lediglich aufgefordert, eine Konfigurationseigenschaft festzulegen.

meder omuraliev
quelle

Antworten:

72

Dieses Python-Modul für Redis enthält ein klares Verwendungsbeispiel in der Readme-Datei: http://github.com/andymccurdy/redis-py

Redis ist als RAM-Cache konzipiert. Es unterstützt das grundlegende GET und SET von Schlüsseln sowie das Speichern von Sammlungen wie Wörterbüchern. Sie können RDBMS-Abfragen zwischenspeichern, indem Sie ihre Ausgabe in Redis speichern. Das Ziel wäre es, Ihre Django-Site zu beschleunigen. Verwenden Sie Redis oder einen anderen Cache erst, wenn Sie die Geschwindigkeit benötigen - optimieren Sie nicht vorzeitig.

Spike Gronim
quelle
Aber wie überprüfen Sie, ob der Cache auf Redis aktualisiert werden muss? Vergleichen Sie die Anzahl der Datensätze oder gibt es einen besseren Weg?
Marconi
7
Dies erfolgt normalerweise durch Festlegen einer TTL für den Schlüssel: redis.io/commands/ttl . Wenn der Schlüssel abläuft, müssen Sie zur Datenbank gehen. Wenn sich der Schlüssel in redis befindet, verwenden Sie ihn. Beachten Sie, dass die einfache Implementierung einige Probleme verursacht: Wenn ein beliebter Schlüssel abläuft, haben Sie en.wikipedia.org/wiki/Thundering_herd_problem , möchten Sie en.wikipedia.org/wiki/Negative_cache verwenden , und Ihre Datenbank benötigt en.wikipedia. org / wiki / Admission_control
Spike Gronim
4
Ähm, a) Redis ist so konzipiert, dass es mehr als nur RAM-Cache ist - es ist persistent (enthält jedoch Funktionen für den Cache), b) es ist mehr als nur eine einfache Speicherung von Schlüsselwerten - es gibt Listen, Hashsets usw. mit integrierten Manipulationen.
Olli
8
Das ehrliche Zwischenspeichern von Modell- / Antwortobjekten fällt nicht unter eine vorzeitige Optimierung. Wenn Sie nicht dazu aufgefordert werden (wie bei Heroku), schadet es nicht, selbst für kleine Apps zwischenzuspeichern.
Vikki
1
Es geht nicht um Geschwindigkeit, es geht um Ressourcen. Eine Tabelle im Cache ist günstiger.
Dman
60

Nur weil Redis Dinge im Speicher speichert, heißt das nicht, dass es sich um einen Cache handelt. Ich habe Leute gesehen, die es als dauerhaften Speicher für Daten verwendeten.

Dass es als Cache verwendet werden kann, ist ein Hinweis darauf, dass es als Hochleistungsspeicher nützlich ist. Wenn Ihr Redis-System ausfällt, verlieren Sie möglicherweise Daten, die nicht erneut auf die Festplatte geschrieben wurden. Es gibt einige Möglichkeiten, solche Gefahren zu mindern, z. B. eine Hot-Standby-Replik. Wenn Ihre Daten "geschäftskritisch" sind, z. B. wenn Sie eine Bank oder ein Geschäft betreiben, ist Redis möglicherweise nicht die beste Wahl für Sie. Wenn Sie jedoch ein stark frequentiertes Spiel mit dauerhaften Live-Daten oder sozialem Interaktionsmaterial schreiben und die Wahrscheinlichkeit eines Datenverlusts als akzeptabel akzeptieren, ist Redis möglicherweise einen Blick wert.

Wie auch immer, der Punkt bleibt, ja, Redis kann als Datenbank verwendet werden.

Stefan Schubert-Peters
quelle
3
Für mein Unternehmen verwenden wir Redis, um Zusammenfassungen und Produkte von Cassandra & Postgres zu speichern. Die Menge dieser Produkte (mehrere Milliarden), wie oft sie gewechselt werden müssen und dass wir nie wissen, was zu irgendeinem Zeitpunkt benötigt wird, macht sie perfekt für Redis. Sobald Sie eine Million Zeilen in einer SQL-Datenbank überschreiten, kann Redis eine großartige kostenlose Ressource für Mitgliedschaftstests sein (z. B. Sind diese Entitäten in dieser Domäne?)
David
Ich frage mich, warum meine Antwort, die einige Monate zuvor genau den gleichen Punkt gemacht hat, von Ihrer übersprungen wurde ... Na ja.
Ostergaard
22

Redis ist im Grunde ein 'in Memory'-KV-Laden mit vielen Schnickschnack. Es ist äußerst flexibel. Sie können es als temporären Speicher wie einen Cache oder als permanenten Speicher wie eine Datenbank verwenden (mit Einschränkungen, wie in anderen Antworten erwähnt).

In Kombination mit Django besteht der beste / häufigste Anwendungsfall für Redis wahrscheinlich darin, "Antworten" und Sitzungen zwischenzuspeichern.

Hier gibt es ein Backend https://github.com/sebleier/django-redis-cache/ und eine hervorragende Dokumentation in den Django-Dokumenten hier: https://docs.djangoproject.com/de/1.3/topics/cache/ .

Ich habe vor kurzem angefangen zu verwenden https://github.com/erussell/django-redis-status zur Überwachung meines Caches zu verwenden - das ist ein Zauber. (Konfigurieren Sie maxmemory auf redis oder die Ergebnisse sind nicht so nützlich).

ostergaard
quelle
5

Sie können Redis auch als Warteschlange für verteilte Aufgaben in Ihrer Django-App verwenden. Sie können es als Nachrichtenbroker für Sellerie oder Python RQ verwenden .

Dmitrii Mikhailov
quelle
2

Redis als Primärdatenbank

Ja, Sie können den Redis-Schlüsselwertspeicher als Primärdatenbank verwenden. Redis speichert nicht nur Schlüssel-Wert-Paare, sondern unterstützt auch verschiedene Datenstrukturen wie

  1. Aufführen
  2. einstellen
  3. Sortiertes Set
  4. Hashes
  5. Bitmaps
  6. Hyperloglogs

Redis Datentypen Offizielles Dokument

Redis befindet sich im Speicherschlüsselwertspeicher. Wenn ein Redis-Serverfehler auftritt, müssen Ihre Daten verloren gehen.

Redis kann auch die Überprüfung des offiziellen Dokuments fortsetzen.

Redis Persistence Official doc


Redis als Cache

Ja, Redis wohnen zwischen Django und RDBMS.

Wie es funktioniert

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

Djangos Cache-Framework Official Doc


Wie kann man Redis mit Django benutzen?

Wir können den Redis Python Client Redis-Py für die Django-Anwendung verwenden.

Redis Python-Client redis-py Github

Wir können Django-Redis für das Django- Cache-Backend verwenden.

Django-Redis bauen auf Redis-Py und hat zusätzliche Funktionen im Zusammenhang mit der Django-Anwendung hinzugefügt.

Django-redis doc Github

Es gibt auch andere Bibliotheken.


Redis Anwendungsfälle und Datentypen

Einige Anwendungsfälle

  • Sitzungscache
  • Echtzeitanalyse
  • Web-Caching
  • Bestenlisten

Top Redis-Anwendungsfälle nach Kerndatenstrukturtypen


Big Tech-Unternehmen, die Redis einsetzen

 Twitter GitHub Weibo Pinterest Snapchat Craigslist Digg StackOverflow Flickr 

Muhammad Faizan Fareed
quelle