Ich habe einige Redis-Dokumente gelesen und das Tutorial unter http://try.redis-db.com/ ausprobiert . Bisher kann ich keinen Unterschied zwischen Redis und Caching-Technologien wie Velocity oder dem Enterprise Library Caching Framework feststellen
Sie fügen einem speicherinternen Datenspeicher effektiv nur Objekte mit einem eindeutigen Schlüssel hinzu. Es scheint keine relationale Semantik zu geben ...
Was vermisse ich?
Antworten:
Nein, Redis ist viel mehr als 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, Lists und Sorted Sets. Jeder Datentyp macht verschiedene Operationen verfügbar.
Der beste Weg, um Redis zu verstehen, besteht darin, eine Anwendung zu modellieren, ohne darüber nachzudenken, wie Sie sie in einer Datenbank speichern werden.
Nehmen wir an, wir möchten StackOverflow.com erstellen. Um es einfach zu halten, benötigen wir Fragen, Antworten, Tags und Benutzer.
Modellieren von Fragen, Benutzern und Antworten
Jedes Objekt kann als Karte modelliert werden. Eine Frage ist beispielsweise eine Karte mit den Feldern {ID, Titel, Datumsanfrage, Stimmen, Nachfrage, Status}. Ebenso ist eine Antwort eine Karte mit den Feldern {id, question_id, answer_text, reply_by, Stimmen, Status}. Ebenso können wir ein Benutzerobjekt modellieren.
Jedes dieser Objekte kann direkt in Redis als Hash gespeichert werden. Um eindeutige IDs zu generieren, können Sie den Befehl atomares Inkrement verwenden. Etwas wie das -
Umgang mit Stimmen
Jedes Mal, wenn jemand eine Frage oder Antwort positiv bewertet, müssen Sie dies nur tun
Liste der Fragen zur 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.
Wenn Sie jetzt Ihre Homepage rendern möchten, stellen Sie Redis die letzten 25 Fragen.
Nachdem Sie die IDs haben, rufen Sie Elemente mithilfe von Pipelining von Redis ab und zeigen Sie sie dem Benutzer an.
Fragen nach Tags, sortiert nach Stimmen
Als nächstes möchten wir Fragen für jedes Tag abrufen. Mit SO können Sie jedoch unter jedem Tag die am häufigsten bewerteten Fragen, neuen Fragen oder unbeantworteten Fragen anzeigen.
Um dies zu modellieren, verwenden wir die Funktion "Sortiertes Set" von Redis. Mit einem sortierten Satz können Sie jedem Element eine Punktzahl zuordnen. Sie können dann Elemente basierend auf ihren Punktzahlen abrufen.
Machen wir das für das Redis-Tag
Was haben wir hier gemacht? Wir haben einem sortierten Satz Fragen hinzugefügt und jeder Frage eine Punktzahl (Anzahl der Stimmen) zugeordnet. Jedes Mal, wenn eine Frage positiv bewertet wird, erhöhen wir ihre Punktzahl. Und wenn ein Benutzer auf "Fragen mit dem Tag Redis, sortiert nach Stimmen" klickt, führen wir einfach eine aus
zrevrange
und erhalten die wichtigsten Fragen zurück.Echtzeitfragen ohne Seite zu aktualisieren
Und schließlich eine Bonusfunktion. Wenn Sie die Fragenseite geöffnet lassen, werden Sie von 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, z. B. "channel_questions_tagged_redis". Sie gelangen dann
subscribe
zu einem bestimmten Kanal. Wenn eine neue Frage hinzugefügt wird, würden Siepublish
eine Nachricht an diesen Kanal senden. Alle Benutzer würden dann die Nachricht erhalten. Sie müssen eine Webtechnologie wie Web-Sockets oder Kometen verwenden, um die Nachricht tatsächlich an den Browser zu übermitteln. Redis hilft Ihnen jedoch bei allen Installationsarbeiten auf der Serverseite.Ausdauer, Zuverlässigkeit usw.
Im Gegensatz zu einem Cache behält Redis Daten auf der Festplatte bei. Sie können ein Master-Slave-Setup verwenden, um eine bessere Zuverlässigkeit zu gewährleisten. Weitere Informationen finden Sie hier unter Persistenz- und Replikationsthemen - http://redis.io/documentation
quelle
Nicht nur ein Cache.
quelle
Redis verfügt über einzigartige Fähigkeiten wie ultraschnelle Lua-Skripte. Seine Ausführungszeit entspricht der Ausführung von C-Befehlen. Dies bringt auch Atomizität für eine ausgefeilte Redis-Datenmanipulation mit sich, die für die Arbeit mit vielen fortgeschrittenen Objekten wie Locks und Semaphoren erforderlich ist.
Es gibt ein Redis-basiertes Speicherdatenraster namens Redisson , mit dem verteilte Anwendungen einfach auf Java erstellt werden können . Dank verteilt
Lock
,Semaphore
,ReadWriteLock
,CountDownLatch
,ConcurrentMap
Objekte und viele andere.Perfekt funktioniert in Cloud und unterstützt AWS ElastiCache , AWS ElastiCache Cluster und Azure Redis Cache - Unterstützung
quelle
Tatsächlich besteht keine Abhängigkeit zwischen der relativen Datendarstellung (oder einer beliebigen Art der Datendarstellung) und der Datenbankrolle (Cache, permanente Persistenz usw.).
Redis ist gut für den Cache, aber es ist viel mehr als nur ein Cache. Es ist eine Hochgeschwindigkeits-In-Memory-Datenbank. Daten auf der Festplatte bleiben erhalten. Es ist nicht relational, sondern ein Schlüsselwertspeicher.
Wir verwenden es in der Produktion. Redis hilft uns dabei, Software zu entwickeln, die Tausende von Anfragen pro Sekunde verarbeitet und Kundengeschäftsdaten während des gesamten natürlichen Lebenszyklus speichert.
quelle
Redis ist ein Cache, der am besten für verteilte Umgebungen / Microservice-Architekturen geeignet ist.
Es ist schnell, zuverlässig, bietet Atomizität und Konsistenz und verfügt über eine Reihe von Datentypen wie Mengen, Hashes, Listen usw.
Ich verwende es seit einem Jahr und es ist wirklich ein Retter, wenn Sie eine produktionsbereite Lösung sehr schnell und für alle leistungsbezogenen Probleme bereitstellen müssen, da Sie es immer zum Zwischenspeichern von Daten verwenden können.
quelle
Redis ist nicht nur ein Cache-Server, sondern auch ein Datenstruktur-Server. Ein Cache in Form eines Datenstruktur-Servers zu sein, bedeutet viel, da Datenstrukturen Grundlagen von Programmen oder Anwendungen sind . Stellen Sie sich vor, Sie verwenden SQL-Datenbanken als Speichertechnologie und müssen eine Liste, eine Hash-Map, eine Rangliste oder ähnliches erstellen. Das ist eine Art Nackenschmerzen. Redis kann Ihnen diese Funktionen auf sehr einfache Weise direkt zur Verfügung stellen und so die Entwicklung erheblich vereinfachen.
Andererseits muss ein Datenstruktur-Server nicht in Form eines Caches vorliegen. Es gibt Projekte, die mit Redis kompatibel sind, aber dauerhafte Speicher-Engines haben.
quelle
Redis unterstützt Datenstrukturen wie Zeichenfolgen, Hashes, Listen, Mengen, sortierte Mengen mit Bereichsabfragen, Bitmaps, Hyperloglogs, Geodaten mit Radiusabfragen und Streams. Redis verfügt über integrierte Replikation, Lua-Skripterstellung, LRU-Räumung, Transaktionen und verschiedene Ebenen der Persistenz auf der Festplatte und bietet hohe Verfügbarkeit über Redis Sentinel und automatische Partitionierung mit Redis Cluster.
Implementierung mit Python
https://beyondexperiment.com/vijayravichandran06/redis-data-structure-with-python/
quelle