Redis Cache vs Speicher direkt verwenden

141

Ich habe Redis noch nicht verwendet, aber ich habe davon gehört und plane, es als Cache-Speicher zu versuchen.

Ich habe gehört, dass Redis Speicher als Cache-Speicherdatenbank verwendet. Was ist also der Unterschied, wenn ich eine Variable als Objekt- oder Wörterbuch-Datentyp zum Speichern von Daten verwende? mögen:

var cache = {
    key: {

    },
    key: {

    }
    ...
}

Was ist der Vorteil, den Redis haben?

hh54188
quelle

Antworten:

221

Redis ist ein Remote- Datenstruktur-Server. Es ist sicherlich langsamer als nur das Speichern der Daten im lokalen Speicher (da es Socket-Roundtrips zum Abrufen / Speichern der Daten beinhaltet). Es bringt jedoch auch einige interessante Eigenschaften:

  • Auf Redis können alle Prozesse Ihrer Anwendungen zugreifen, die möglicherweise auf mehreren Knoten ausgeführt werden (etwas, das der lokale Speicher nicht erreichen kann).

  • Der Redis-Speicher ist sehr effizient und wird in einem separaten Prozess ausgeführt. Wenn die Anwendung auf einer Plattform ausgeführt wird, deren Speicher durch Müll gesammelt wurde (node.js, java usw.), kann ein viel größerer Speichercache / -speicher verwaltet werden. In der Praxis funktionieren sehr große Haufen mit mit Müll gesammelten Sprachen nicht gut.

  • Redis kann die Daten auf der Festplatte bei Bedarf beibehalten.

  • Redis ist ein bisschen mehr als ein einfacher Cache: Es bietet verschiedene Datenstrukturen, verschiedene Richtlinien zum Entfernen von Elementen, Blockieren von Warteschlangen, Pub / Sub, Atomicity, Lua-Scripting usw.

  • Redis kann seine Aktivität mit einem Master / Slave-Mechanismus replizieren, um Hochverfügbarkeit zu implementieren.

Wenn Ihre Anwendung auf mehreren Knoten skaliert werden soll, die dieselben Daten gemeinsam nutzen, ist grundsätzlich Redis (oder ein anderer Remote-Schlüssel- / Wertspeicher) erforderlich.

Didier Spezia
quelle
5
Ihr letzter Punkt lässt besonders den Eindruck entstehen, dass Dinge wie Rlite etwas sinnlos sind - ein Wörterbuchspeicher wäre in den meisten Anwendungsfällen, in denen Sie einen einzigen Prozess haben, genauso geeignet. Ist das richtig?
naught101
1
Ja. IMO ist das Interesse von Rlite recht begrenzt.
Didier Spezia
Vielen Dank für diese Hinweise. Redis ist also großartig zu skalieren, aber ich gehe davon aus, dass im Fall einer einfachen Chat-App mit durchschnittlich 300 bis 500 Objekten, die im Speicher abgerufen werden sollen, die In-Memory-Datenstruktur die Aufgabe sehr gut erledigt, wenn nicht sogar schneller sind kleine Zahlen?
Webwoman
2
@DidierSpezia very large heaps do not perform well with garbage collected languageskannst du erklären warum?
Roottraveller
1
@roottraveller, ich glaube, das liegt daran, dass der Garbage Collection-Prozess im Allgemeinen die Ausführung Ihrer Anwendung ("Stop-the-World") unterbrechen muss, um Heap-Speicher freizugeben. Je größer der Heap, desto länger dauert diese Unterbrechung im Allgemeinen.
Regorsmitz
3

Derzeit fühlen wir uns mehr von der Architektur ohne Server angezogen, bei der jede Anforderung an einen anderen Container gesendet werden kann. In diesem Fall kann Redis eine sehr wichtige Rolle spielen.

Wir können den einfachen Cache im Server nicht weniger verwenden, da wir nicht sicher sein können, dass unsere Anfrage in demselben Container zugestellt wird, in dem unser einfacher Cache gespeichert ist.

In diesem Fall müssen wir redis verwenden, da es den Cache an einem entfernten Ort speichert und wir darauf zugreifen können, dass sich sogar Container in einer Architektur ohne Server ändern.

Ashish Bainade
quelle