Wann sollte ein Schlüssel- / Wertspeicher wie Redis anstelle / neben einer SQL-Datenbank verwendet werden?

166

Ich habe großartige Dinge über Schlüssel- / Wertspeicher wie Redis gelesen, aber ich kann anscheinend nicht herausfinden, wann es Zeit ist, sie in einer Anwendung zu verwenden.

Angenommen, ich entwerfe eine webbasierte Anwendung. Ich weiß, welchen Stack ich für das Front-End, das Back-End, die Datenbank (en) usw. verwenden werde. In einigen Szenarien würde ich sagen: "Oh, wir brauchen auch Redis für X, Y oder Z."

Ich würde mich über Beispiele für node.js sowie für Beispiele ohne node.js freuen.

Chris Abrams
quelle

Antworten:

102

Ich kann anscheinend nicht herausfinden, wann es Zeit ist, es in einer Anwendung zu verwenden.

Ich würde Ihnen empfehlen, dieses Tutorial zu lesen, das auch Anwendungsfälle enthält. Da redis eher speicherorientiert ist, eignet es sich sehr gut für häufig aktualisierte Echtzeitdaten wie Sitzungsspeicher, Statusdatenbank, Statistik, Caching und seine erweiterten Datenstrukturen bieten Vielseitigkeit für viele andere Szenarien.

Redis ist jedoch kein NoSQL-Ersatz für klassische relationale Datenbanken, da es nicht viele Standardfunktionen der RDBMS-Welt unterstützt, z. B. das Abfragen Ihrer Daten, wodurch diese möglicherweise verlangsamt werden. Ersatz sind eher Dokumentendatenbanken wie MongoDB oder CouchDB, und redis ist hervorragend geeignet, um bestimmte Funktionen zu ergänzen, bei denen Geschwindigkeit und Unterstützung für erweiterte Datenstrukturen nützlich sind.

yojimbo87
quelle
3
Das Tutorial, mit dem Sie verlinkt haben, ist fantastisch!
Chris Abrams
5
Ich habe eine schnelle Google-Suche mit dieser Tutorial-Site-URL durchgeführt und bin
Paul
66

Ich denke, nichts erklärt die Anwendungsfälle für Redis besser als dieser Artikel: http://antirez.com/post/take-advantage-of-redis-adding-it-to-your-stack.html

Ich wette du wirst ein Aha haben! Moment . ;)

Ein Zitat eines früheren Lesers:

Ich habe bereits über Redis gelesen und gehört, wie Unternehmen es verwenden, aber nie ganz verstanden, wozu es dient. Nachdem ich dies gelesen habe, kann ich tatsächlich sagen, dass ich Redis jetzt verstehe und wie nützlich es ist. Erstaunlich, dass es, nachdem ich so viel darüber gehört hatte, nur einen relativ einfachen Artikel gab.

Ein Zitat aus dem Artikel:

Redis unterscheidet sich in vielerlei Hinsicht von anderen Datenbanklösungen: Es verwendet Speicher als Hauptspeicherunterstützung und Festplatte nur für die Persistenz, das Datenmodell ist ziemlich einzigartig, es ist Single-Threaded und so weiter. Ich denke, dass ein weiterer großer Unterschied darin besteht, dass Sie nicht zu Redis wechseln müssen, um Redis in Ihrer Produktionsumgebung nutzen zu können. Sie können es einfach verwenden, um neue Dinge zu tun, die vorher nicht möglich waren, oder um alte Probleme zu beheben.

Anwendungsfälle, auf die der Artikel eingeht:

  • Langsame Auflistung der neuesten Artikel auf Ihrer Homepage
  • Bestenlisten und damit verbundene Probleme
  • Reihenfolge nach Benutzerstimmen und Uhrzeit
  • Das Implementieren läuft für Elemente ab
  • Sachen zählen
  • Einzigartige N Gegenstände in einer bestimmten Zeitspanne
  • Echtzeitanalyse des Geschehens, für Statistiken, Anti-Spam oder was auch immer
  • Pub / Sub
  • Warteschlangen
  • Caching
zenw0lf
quelle
Dieser Artikel ist sehr nützlich, ich habe, was ich wissen wollte
Hos Mercury
@ Zenw0lf Ist Redis immer noch das Beste für einfaches Caching? Ihr Beitrag stammt aus dem Jahr 2011, daher bin ich mir nicht sicher, ob ich noch etwas verwenden sollte.
Moondra
@Moondra Ja, das Projekt ist noch sehr lebendig und sein Schöpfer veröffentlicht es häufig. Es ist immer noch ein großartiges Projekt für verschiedene Nutzungsszenarien!
Zenw0lf
@ zenw0lf Guter Artikel, aber ich bin in einigen Anwendungsfällen immer noch etwas verwirrt. Beispiel: Der Anwendungsfall "Neuester Artikel". Warum ist es in diesem Fall besser, Redis hinzuzufügen? Was sich in der Datenbank befindet, fügen wir in einer bestimmten Tabelle hinzu, nur um Benutzer-ID, Kommentar (ID) und / oder Zeitstempel zu haben, und verwenden diese direkt. Wird das nicht dasselbe sein?
Tony Lin
1
@TonyLin Es ist beides, es ist schnell, weil es im Speicher ist und weil Redis auch eine ziemlich gute Implementierung von hochmodernen Datenmodellen hat, um seine Arbeit so gut wie möglich zu erledigen.
Zenw0lf
9
  • Ich würde gerne Redis für Echtzeitprojekte verwenden. Ich habe vor kurzem für ein GPS-Tracking-System, das zuvor auf MySQL als Datenbank aufgebaut war.

    VORTEIL

    1. Jedes Mal, wenn der Tracker Daten sendet, muss ich keine MySQL-Verbindung öffnen und darauf speichern. Wir können es auf Redis speichern und später mit einem anderen Verfahren auf MySQL migrieren. Dadurch wird eine gleichzeitige Verbindung vom Mehrfach-Tracker zu MySQL vermieden.
    2. Ich kann all diese GPS-Daten veröffentlichen und andere Clients (Javascript / Android) können in Echtzeit mithilfe der auf Redis basierenden Nachrichtenwarteschlange abonnieren
    3. Ich kann Echtzeitwarnungen auslösen
sumit
quelle
3

Eine Sache ist, dass Redis keine relationale Datenbank ist. Wenn Sie ein SQL "JOIN" benötigen, möchten Sie weder Redis noch eine andere nicht relationale Datenbank verwenden. Redis ist jedoch schneller als die meisten relationalen Datenbanken. Wenn Sie nur Schlüssel-Wert-Paar-Abfragen durchführen, sollten Sie Redis verwenden.

EhevuTov
quelle
Wäre es beispielsweise gut, redis für Informationen zu einer Benutzersitzung zu verwenden, damit schneller auf Name, E-Mail, ID usw. zugegriffen werden kann?
Chris Abrams
Ich würde es mir denken. Das Kyoto-Kabinett wäre dafür noch schneller, denke ich.
EhevuTov