it-swarm.com.de

Ist Redis nur ein Cache?

Ich habe einige Redis-Dokumente gelesen und das Tutorial unter http://try.redis-db.com/ getestet. Bislang sehe ich keinen Unterschied zwischen Redis- und Caching-Technologien wie Velocity oder dem Enterprise Library Caching Framework

Sie fügen praktisch nur Objekte mit einem eindeutigen Schlüssel einem In-Memory-Datenspeicher hinzu. Es scheint keine relationale Semantik zu geben ...

Was vermisse ich?

227
Matthew Evans

Nein, Redis ist viel mehr als nur ein Cache. 

Wie ein Cache speichert Redis Schlüssel-Wert-Paare. Im Gegensatz zu einem Cache können Sie mit Redis die Werte bearbeiten. Es gibt 5 Datentypen in Redis - Strings, Sets, Hash, Listen und sortierte Sets. Jeder Datentyp macht verschiedene Operationen verfügbar.

Der beste Weg, Redis zu verstehen, besteht darin, eine Anwendung zu modellieren, ohne darüber nachzudenken, wie sie in einer Datenbank gespeichert werden soll. 

Nehmen wir an, wir wollen StackOverflow.com bauen. Um es einfach zu halten, benötigen wir Fragen, Antworten, Tags und Benutzer.

Modellierungsfragen, Benutzer und Antworten

Jedes Objekt kann als Karte modelliert werden. Eine Frage ist beispielsweise eine Karte mit Feldern (ID, Titel, Datum_Aufgabe, Stimmen, Abfragen, Status). In ähnlicher Weise ist eine Antwort eine Karte mit Feldern (id, frage_id, answer_text, answers_by, Stimmen, Status). Ebenso können wir ein Benutzerobjekt modellieren.

Jedes dieser Objekte kann in Redis direkt als Hash gespeichert werden. Um eindeutige IDs zu generieren, können Sie den Befehl atomic increment verwenden. Etwas wie das - 

$ HINCRBY unique_ids question 1
(integer) 1
$ HMSET question:1 title "Is Redis just a cache?" asked_by 12 votes 0
OK

$ HINCRBY unique_ids answer 1
(integer) 1
$ HMSET answer:1 question_id 1 answer_text "No, its a lot more" answered_by 15 votes 1
OK

Abstimmen von Stimmen

Jedes Mal, wenn jemand eine Frage oder Antwort beantwortet, müssen Sie dies nur tun 

$ HINCRBY question:1 votes 1
(integer) 1
$ HINCRBY question:1 votes 1
(integer) 2

Fragenliste für die Homepage

Als Nächstes möchten wir die neuesten Fragen speichern, die auf der Startseite angezeigt werden sollen. Wenn Sie ein .NET- oder Java-Programm schreiben, speichern Sie die Fragen in einer Liste. Es stellt sich heraus, dass dies der beste Weg ist, dies auch in Redis zu speichern. 

Jedes Mal, wenn jemand eine Frage stellt, fügen wir seine ID der Liste hinzu. 

$ lpush questions question:1
(integer) 1
$ lpush questions question:2
(integer) 1

Wenn Sie jetzt Ihre Homepage rendern möchten, fragen Sie Redis nach den letzten 25 Fragen. 

$ lrange questions 0 24
1) "question:100"
2) "question:99"
3) "question:98"
4) "question:97"
5) "question:96"
...
25) "question:76"

Nachdem Sie nun die IDs haben, rufen Sie mithilfe von Pipelining Elemente von Redis ab und zeigen Sie sie dem Benutzer.

Fragen nach Tags, sortiert nach Stimmen

Als Nächstes möchten wir für jedes Tag Fragen abrufen. Mit SO können Sie jedoch unter jedem Tag die am besten bewerteten Fragen, neue Fragen oder unbeantwortete Fragen anzeigen.

Um dies zu modellieren, verwenden wir die Sorted Set-Funktion von Redis. Mit einem sortierten Satz können Sie jedem Element eine Bewertung zuordnen. Sie können dann Elemente basierend auf ihren Bewertungen abrufen. 

Machen wir weiter und tun dies für das Redis-Tag 

$ zadd questions_by_votes_tagged:redis 2 question:1 
(integer) 1
$ zadd questions_by_votes_tagged:redis 10 question:2 
(integer) 1
$ zadd questions_by_votes_tagged:redis 5 question:613 
(integer) 1
$ zrange questions_by_votes_tagged:redis 0 5 
1) "question:1"
2) "question:613"
3) "question:2"
$ zrevrange questions_by_votes_tagged:redis 0 5 
1) "question:2"
2) "question:613"
3) "question:1"

Was haben wir hier gemacht? Wir haben Fragen zu einem sortierten Satz hinzugefügt und jeder Frage eine Punktzahl (Anzahl der Stimmen) zugeordnet. Jedes Mal, wenn eine Frage angehoben wird, erhöhen wir ihre Punktzahl. Wenn ein Benutzer auf "Fragen getaggte Redis, sortiert nach Stimmen" klickt, machen wir einfach eine zrevrange und erhalten die obersten Fragen zurück.

Echtzeit-Fragen ohne erneuernde Seite

Und zum Schluss noch ein Bonus-Feature. Wenn Sie die Frage-Seite geöffnet lassen, werden Sie durch das Symbol SO benachrichtigt, wenn eine neue Frage hinzugefügt wird. Wie kann Redis hier helfen?

Redis hat ein Pub-Sub-Modell. Sie können Kanäle erstellen, beispielsweise "channel_questions_tagged_redis". Sie subscribe Benutzer zu einem bestimmten Kanal. Wenn eine neue Frage hinzugefügt wird, würden Sie eine publish-Nachricht an diesen Kanal senden. Alle Benutzer würden dann die Nachricht erhalten. Sie müssen eine Web-Technologie wie Web-Sockets oder Comet verwenden, um die Nachricht tatsächlich an den Browser zu übermitteln, aber Redis hilft Ihnen bei der Installation auf Server-Seite.

Persistenz, Zuverlässigkeit usw.

Im Gegensatz zu einem Cache speichert Redis Daten auf der Festplatte. Sie können ein Master-Slave-Setup einrichten, um die Zuverlässigkeit zu erhöhen. Weitere Informationen finden Sie hier - http://redis.io/documentation .

586

Redis verfügt über einzigartige Fähigkeiten wie ultraschnelle Lua-Skripte. Seine Ausführungszeit entspricht der Ausführung von C-Befehlen. Dies sorgt auch für eine ausgefeilte Redis-Datenmanipulation, die für die Arbeit vieler fortgeschrittener Objekte wie Locks und Semaphores erforderlich ist.

Es gibt ein Redis-basiertes Speicher-Datengitter namens Redisson , mit dem Distributed Applications auf Java einfach erstellt werden können. Dank verteilter Lock, Semaphore, ReadWriteLock, CountDownLatch, ConcurrentMap Objekte und vielen anderen.

Funktioniert perfekt in der Cloud und unterstützt AWS Elasticache , AWS Elasticache Cluster und Azure Redis Cache Unterstützung

3

Nicht nur ein Cache.

  • Im Speicher Schlüsselwertspeicher
  • Unterstützung mehrerer Datentypen (Strings, Hashes, Listen, Sets, sortierte Sets, Bitmaps und Hyperloglogs)
  • Es bietet die Möglichkeit, Cache-Daten im physischen Speicher (falls erforderlich) zu speichern.
  • Unterstützt das Pub-Sub-Modell
  • Redis-Cache bietet Replikation für hohe Verfügbarkeit (Master/Slave)
2
Pankaj Rawat

Tatsächlich besteht keine Abhängigkeit zwischen relativer Datendarstellung (oder irgendeiner Art von Datendarstellung) und Datenbankrolle (Cache, permanente Persistenz usw.).

Redis ist gut für Cache, aber es ist viel mehr als nur ein Cache. Es ist eine Hochgeschwindigkeits-In-Memory-Datenbank. Es bleiben Daten auf der Festplatte erhalten. Es ist nicht relational, es ist der Schlüsselwertspeicher.

Wir verwenden es in der Produktion. Redis hilft uns dabei, eine Software zu entwickeln, die Tausende von Anfragen pro Sekunde verarbeitet und die Geschäftsdaten der Kunden während des gesamten natürlichen Lebenszyklus aufrechterhält.

1
Denys

Redis ist ein Cache, der am besten für verteilte Umgebungen/Microservice-Architektur geeignet ist.

Es ist schnell, zuverlässig, bietet Atomizität und Konsistenz und verfügt über eine Reihe von Datentypen wie Sets, Hashes, Listen usw. 

Ich verwende es seit einem Jahr und es ist wirklich ein Retter, wenn Sie sehr schnell eine produktionsbereite Lösung und für alle Performance-Probleme bereitstellen müssen.

0
Manvendra Jina

Redis ist nicht nur ein Cache-Server, sondern auch ein Datenstruktur-Server. Ein Cache in Form eines Datenstruktur-Servers zu sein, bedeutet viel, weil Datenstrukturen Grundlagen von Programmen oder Anwendungen sind. Angenommen, Sie verwenden SQL-Datenbanken als Speichertechnologie und müssen eine Liste, eine Hash-Map, eine Rangliste oder ähnliches erstellen. Redis kann Ihnen diese Funktionalitäten auf sehr einfache Weise direkt zur Verfügung stellen und so die Entwicklung stark vereinfachen.

Andererseits muss ein Datenstruktur-Server nicht in Form eines Caches vorliegen. Es gibt Projekte, die mit Redis kompatibel sind, jedoch über permanente Speicher-Engines verfügen.