Redis speichert Schlüssel, die auf Werte verweisen. Schlüssel können beliebige Binärwerte bis zu einer angemessenen Größe sein (die Verwendung kurzer ASCII-Zeichenfolgen wird aus Gründen der Lesbarkeit und zu Debugging-Zwecken empfohlen). Werte sind einer der fünf nativen Redis-Datentypen.
1.strings - eine Folge von binären sicheren Bytes bis zu 512 MB
2.hashes - eine Sammlung von Schlüssel-Wert-Paaren
3.lists - eine Sammlung von Zeichenketten in Einfügereihenfolge
4.sets - eine Sammlung von eindeutigen Zeichenketten ohne Reihenfolge
5. sortierte Mengen - eine Sammlung eindeutiger Zeichenfolgen, die nach einer benutzerdefinierten Bewertung geordnet sind
Streicher
Ein Redis-String ist eine Folge von Bytes.
Strings in Redis sind binärsicher (d.h. sie haben eine bekannte Länge, die nicht durch spezielle Abschlusszeichen bestimmt wird), so dass Sie alles bis zu 512 Megabyte in einem String speichern können.
Strings sind das kanonische "Schlüssel-Wert-Speicher"-Konzept. Sie haben einen Schlüssel, der auf einen Wert zeigt, wobei sowohl Schlüssel als auch Wert Text oder binäre Zeichenketten sind.
Für alle möglichen Operationen auf Zeichenketten, siehe die http://redis.io/commands/#string
Hashes
Ein Redis-Hash ist eine Sammlung von Schlüssel-Wert-Paaren.
Ein Redis-Hash enthält viele Schlüssel-Wert-Paare, wobei jeder Schlüssel und Wert eine Zeichenkette ist. Redis-Hashes unterstützen keine komplexen Werte direkt (d.h. ein Hash-Feld kann nicht den Wert einer Liste, eines Sets oder eines anderen Hashes haben), aber Sie können Hash-Felder verwenden, um auf andere komplexe Werte der höchsten Ebene zu verweisen. Die einzige spezielle Operation, die Sie mit Hash-Feld-Werten durchführen können, ist das atomare Inkrementieren/Dekrementieren von numerischen Inhalten.
Man kann sich Redis-Hashes auf zwei Arten vorstellen: als direkte Objektdarstellung und als eine Möglichkeit, viele kleine Werte kompakt zu speichern.
Direkte Objektdarstellungen sind einfach zu verstehen. Objekte haben einen Namen (den Schlüssel des Hashes) und eine Sammlung von internen Schlüsseln mit Werten. Das folgende Beispiel ist ein Beispiel dafür.
Die Speicherung vieler kleiner Werte mit einem Hash ist eine clevere Redis-Massenspeichertechnik. Wenn ein Hash eine kleine Anzahl von Feldern hat (~100), optimiert Redis die Speicher- und Zugriffseffizienz des gesamten Hash. Die Redis-Speicheroptimierung für kleine Hashes führt zu einem interessanten Verhalten: Es ist effizienter, 100 Hashes mit jeweils 100 internen Schlüsseln und Werten zu haben, als 10.000 Top-Level-Schlüssel, die auf String-Werte zeigen. Die Verwendung von Redis-Hashes zur Optimierung der Datenspeicherung auf diese Weise erfordert zusätzlichen Programmieraufwand für die Nachverfolgung, wo die Daten am Ende landen, aber wenn Ihre Datenspeicherung in erster Linie auf Strings basiert, können Sie mit diesem seltsamen Trick eine Menge Speicher-Overhead sparen.
Für alle möglichen Operationen mit Hashes, siehe die Hash-Dokumente
Verzeichnisse
Redis-Listen verhalten sich wie verknüpfte Listen.
Sie können Listen entweder vom Kopf oder vom Ende einer Liste aus einfügen, löschen und durchlaufen.
Verwenden Sie Listen, wenn Sie die Werte in der Reihenfolge, in der sie eingefügt wurden, beibehalten wollen. (Redis gibt Ihnen die Möglichkeit, bei Bedarf an jeder beliebigen Listenposition einzufügen, aber Ihre Einfügeleistung wird sich verschlechtern, wenn Sie weit von Ihrer Startposition entfernt einfügen).
Redis-Listen werden häufig als Producer/Consumer-Warteschlangen verwendet. Fügen Sie Elemente in eine Liste ein und entfernen Sie dann Elemente aus der Liste. Was passiert, wenn Ihre Konsumenten versuchen, aus einer Liste ohne Elemente zu posten? Sie können Redis bitten, auf das Erscheinen eines Elements zu warten und es Ihnen sofort zurückzugeben, wenn es hinzugefügt wird. Dies macht Redis zu einer Echtzeit-Warteschlange/einem Ereignis/einem Job/einer Aufgabe/einem Benachrichtigungssystem.
Sie können atomar Elemente von beiden Enden einer Liste entfernen, so dass jede Liste wie ein Stapel oder eine Warteschlange behandelt werden kann.
Sie können auch Listen mit fester Länge (Capped Collections) pflegen, indem Sie Ihre Liste nach jedem Einfügen auf eine bestimmte Größe trimmen.
Für alle möglichen Operationen auf Listen, siehe die listet Dokumente
Sätze
Redis-Sets sind, nun ja, Sets.
Ein Redis-Set enthält eindeutige, ungeordnete Redis-Strings, wobei jeder String nur einmal pro Set existiert. Wenn Sie das gleiche Element zehnmal zu einem Set hinzufügen, wird es nur einmal angezeigt. Sets eignen sich hervorragend, um sicherzustellen, dass etwas mindestens einmal vorhanden ist, ohne sich Gedanken über doppelte Elemente zu machen, die sich ansammeln und Platz verschwenden. Sie können dieselbe Zeichenfolge beliebig oft hinzufügen, ohne prüfen zu müssen, ob sie bereits vorhanden ist.
Mengen sind schnell für die Überprüfung der Mitgliedschaft, das Einfügen und Löschen von Mitgliedern in der Menge.
Mengen haben, wie zu erwarten, effiziente Mengenoperationen. Sie können die Vereinigung, die Schnittmenge und die Differenz mehrerer Mengen auf einmal ermitteln. Die Ergebnisse können entweder an den Aufrufer zurückgegeben oder in einer neuen Menge zur späteren Verwendung gespeichert werden.
Mengen haben konstanten Zeitzugriff für Zugehörigkeitsprüfungen (im Gegensatz zu Listen), und Redis hat sogar bequeme zufällige Mitgliederentnahme und -rückgabe ("pop a random element from the set") oder zufällige Mitgliederrückgabe ohne Ersatz ("give me 30 random-ish unique users") oder mit Ersatz ("give me 7 cards, but after each selection, put the card back so it can potentially be samplified again").
Für alle möglichen Operationen auf Mengen siehe die setzt Dokumente .
Sortierte Sets
Sortierte Redis-Sets sind Sets mit einer benutzerdefinierten Reihenfolge.
Der Einfachheit halber können Sie sich eine sortierte Menge als einen binären Baum mit eindeutigen Elementen vorstellen. (Redis sortierte Mengen sind eigentlich Überspringungslisten .) Die Sortierreihenfolge der Elemente wird durch die Punktzahl der einzelnen Elemente bestimmt.
Sortierte Mengen sind immer noch Mengen. Elemente dürfen nur einmal in einer Menge vorkommen. Ein Element wird für die Zwecke der Eindeutigkeit durch seinen Zeichenfolgeninhalt definiert. Das Einfügen des Elements "Apfel" mit der Sortierkennzahl 3 und das anschließende Einfügen des Elements "Apfel" mit der Sortierkennzahl 500 führt zu einem Element "Apfel" mit der Sortierkennzahl 500 in Ihrer sortierten Menge. Gruppen sind nur auf der Grundlage von Daten eindeutig, nicht auf der Grundlage von (Punktzahl, Daten) Paaren.
Vergewissern Sie sich, dass Ihr Datenmodell sich auf den Inhalt der Zeichenkette stützt und nicht auf den Wert des Elements für die Eindeutigkeit. Punktzahlen dürfen wiederholt werden (oder sogar Null sein), aber, ein letztes Mal, Set-Elemente können nur einmal pro sortiertem Set existieren. Wenn Sie zum Beispiel versuchen, den Verlauf jeder Benutzeranmeldung als sortierte Menge zu speichern, indem Sie die Punktzahl zur Epoche der Anmeldung und den Wert zur Benutzerkennung machen, werden Sie am Ende nur die letzte Anmeldeepoche für alle Ihre Benutzer speichern. Ihre Menge würde auf die Größe Ihrer Benutzerbasis anwachsen und nicht auf die gewünschte Größe der Benutzerbasis * Anmeldungen.
Die Elemente werden mit Noten zu Ihrem Set hinzugefügt. Sie können die Punktzahl eines jeden Elements jederzeit aktualisieren, indem Sie das Element einfach mit einer neuen Punktzahl hinzufügen. Die Punktzahlen werden durch Fließkommadoppelwerte dargestellt, so dass Sie bei Bedarf die Granularität von hochgenauen Zeitstempeln angeben können. Mehrere Elemente können denselben Punktestand haben.
Sie können Elemente auf verschiedene Weise abrufen. Da alles sortiert ist, können Sie nach Elementen fragen, die mit den niedrigsten Werten beginnen. Sie können nach Elementen fragen, die mit den höchsten Punktzahlen beginnen ("in reverse"). Sie können die Elemente nach ihrem Sortierergebnis entweder in natürlicher oder in umgekehrter Reihenfolge abfragen.
Für alle möglichen Operationen auf sortierten Mengen siehe die sortierte Sätze Dokumente.