Dieser Artikel vermittelt Ihnen relevantes Wissen über Datentypen in Redis. Er stellt hauptsächlich Probleme im Zusammenhang mit allgemeinen Datentyp-Nutzungsszenarien vor.
Empfohlenes Lernen: Redis-Lerntutorial
Redis-Datentypen und Nutzungsszenarien
Im Vergleich zu anderen KV-Datenbanken ist es eines der Hauptmerkmale von Redis unterstützt umfangreiche Datentypen. Es unterstützt insgesamt 5 Datentypen. Diese 5 Datentypen, ihre Verwendungsszenarien und ihre interne Implementierung werden im Folgenden einzeln vorgestellt.
string
Einführung: Der String-Typ ist der grundlegendste Datentyp in Redis, der am häufigsten verwendete Datentyp und wird von vielen Spielern sogar als einziger Datentyp von Redis verwendet. Der String-Typ ist in Redis binärsicher, was bedeutet, dass der String-Wert sich um den Binär-String und nicht um das spezifische Format kümmert. Sie können ihn zum Speichern von Strings im JSON-Format oder JPEG-Bildformat verwenden.
Ermitteln Sie die Länge der Zeichenfolge.
Fügen Sie Inhalt an die Zeichenfolge an der Inhalt einer Reihe von Zeichenfolgen in Stapeln
Gemeinsame Befehle: set, get, decr, incr, mget usw.
Anwendungsszenarien:
set user:id:1 '[{"id":1,"name":"zj","email":"156577812@qq.com"},{"id":1,"name":"zj","email":"156577812@qq.com"}]'
(3) Generieren Sie eine automatisch inkrementierende ID.
Wenn der Wert des Zeichenfolgentyps von Redis die Form einer Ganzzahl hat, kann Redis ihn als eine behandeln Ganzzahl für die automatische Inkrementierung (incr) und automatische Dekrementierung (decr). Da alle Redis-Vorgänge atomar sind, besteht kein Grund zur Sorge über Transaktionsprobleme, die auftreten können, wenn mehrere Clients eine Verbindung herstellen.Hash
Einführung: Hash speichert die Zuordnung zwischen Strings und String-Werten. Hash speichert verschiedene Attribute des Objekts in der Karte und kann nur bestimmte Attribute des Objekts lesen/aktualisieren. Auf diese Weise können einige zu lange Eigenschaften in Ruhe gelassen werden. Darüber hinaus können verschiedene Module nur die Eigenschaften aktualisieren, die ihnen wichtig sind, ohne dass es aufgrund der Parallelität zu Überschreibkonflikten kommt.
Häufig verwendete Befehle: hget, hset, hgetall usw.
HINCRBY kann auch zur Implementierung von idmaker verwendet werden. Im Vergleich zum String-Typ-IDmaker benötigt jeder Typ einen Schlüssel, und der Hash-Typ benötigt nur einen Schlüssel.
Der Hash-Datentyp hat den Vorteil, dass er beim Speichern der oben genannten Datentypen flexibler und schneller ist. Insbesondere ist es beim Speichern des String-Typs erforderlich, Strings im JSON-Format zu konvertieren und zu analysieren Wenn keine Konvertierung erforderlich ist, ist Hash in Bezug auf den Speicheraufwand immer noch im Vorteil.
Implementierungsmethode:
Der dem Wert entsprechende Redis-Hash ist eigentlich eine HashMap. Hier gibt es zwei verschiedene Implementierungen. Wenn der Hash weniger Mitglieder hat, verwendet Redis eine eindimensionale Array-ähnliche Methode, um ihn kompakt zu speichern, anstatt ihn zu verwenden Die Codierung des entsprechenden Werts redisObject ist zipmap. Wenn die Anzahl der Mitglieder zunimmt, wird sie automatisch in eine echte HashMap konvertiert.
Einführung:
Liste ist eine nach Einfügungsreihenfolge sortierte Zeichenfolgenliste. Neue Elemente können am Kopf und am Ende eingefügt werden (doppelt verknüpfte Listenimplementierung, der Zeitaufwand für das Hinzufügen von Elementen an beiden Enden). ist O (1)). Wenn beim Einfügen eines Elements der Schlüssel nicht vorhanden ist, erstellt Redis eine neue verknüpfte Liste für den Schlüssel. Wenn alle Elemente in der verknüpften Liste entfernt werden, wird der Schlüssel auch aus Redis entfernt.
Häufig verwendete Befehle: lpush, rpush, lpop, rpop, lrange usw.
Anwendungsszenarien:
Verschiedene Listen, wie Twitters Follow-Liste, Fan-Liste usw., Rankings der neuesten Nachrichten, Kommentare zu jedem Artikel usw. können ebenfalls mithilfe der Listenstruktur von Redis implementiert werden.
Nachrichtenwarteschlange: Sie können die PUSH-Operation von Listen verwenden, um Aufgaben in Listen zu speichern, und dann verwendet der Arbeitsthread die POP-Operation, um die Aufgaben zur Ausführung herauszunehmen. Die Nachrichtenwarteschlange verfügt hier über keinen Bestätigungsmechanismus. Was passiert, wenn der Verbraucher die Aufgabe an Pop übergibt und abstürzt, bevor er sie beendet? Eine Lösung besteht darin, einen zusätzlichen sortierten Satz hinzuzufügen und ihn gleichzeitig an die Liste und den sortierten Satz zu senden. Nachdem der Benutzer die Aufgabe abgeschlossen hat, muss er ZREM verwenden in der sortierten Menge und entfernen Sie regelmäßig die nicht abgeschlossenen Aufgaben aus der sortierten Menge und fügen Sie sie wieder in die Liste ein. Ein anderer Ansatz besteht darin, für jeden Arbeiter eine zusätzliche Liste hinzuzufügen, RPopLPush zu verwenden, wenn Aufgaben angezeigt werden, den Job gleichzeitig in die eigene Liste des Arbeiters aufzunehmen und ihn nach Abschluss mit LREM zu entfernen. Wenn die Clusterverwaltung (z. B. Zookeeper) feststellt, dass der Worker gestorben ist, wird der Inhalt der Worker-Liste an die Hauptliste zurückgegeben.
Mit LRANGE kann die Paging-Funktion von Listeninhalten problemlos realisiert werden.
Vorgang zum Abrufen der neuesten N-Daten: Mit LPUSH wird eine Inhalts-ID eingefügt und als Schlüsselwort am Anfang der Liste gespeichert. LTRIM wird verwendet, um die Anzahl der Elemente in der Liste auf maximal 5000 zu begrenzen. Wenn die Datenmenge, die der Benutzer abrufen muss, diese Cache-Kapazität überschreitet, muss die Anfrage an die Datenbank gesendet werden.
Implementierungsmethode:
Die Redis-Liste ist als bidirektionale verknüpfte Liste implementiert, die die umgekehrte Suche und das Durchlaufen unterstützen kann, was die Bedienung erleichtert. Allerdings bringt sie bei vielen Implementierungen in Redis einen gewissen zusätzlichen Speicheraufwand mit sich, einschließlich des Sendens Pufferwarteschlangen usw. Diese Datenstruktur wird auch verwendet.
Einführung: Es handelt sich um ein ungeordnetes Set. Die Elemente im Set haben keine Reihenfolge und werden nicht wiederholt. Durch das Einfügen doppelter Elemente in ein Set werden diese automatisch entfernt.
Häufig verwendete Befehle:
sadd, spop, smembers, sunion usw.
Anwendungsszenarien:
Einige Listen müssen dedupliziert werden, und Set bietet eine wichtige Schnittstelle, um festzustellen, ob sich ein Mitglied in einer Set-Sammlung befindet, was eine Liste nicht bieten kann.
Einige kollektive Daten können in der Weibo-Anwendung gespeichert werden. Beispielsweise können alle Follower eines Benutzers in einer Sammlung gespeichert werden, und alle seine Fans können in einer Sammlung gespeichert werden. Redis bietet auch Operationen wie Schnittmenge, Vereinigung und Differenz für Sammlungen, die sehr praktisch sein können, um Funktionen wie gemeinsame Aufmerksamkeit, gemeinsame Vorlieben und Freunde zweiten Grades zu implementieren. Für alle oben genannten Sammlungsoperationen können Sie auch unterschiedliche Befehle verwenden Auswahlen Geben Sie die Ergebnisse an den Client zurück oder speichern Sie sie in einer neuen Sammlung. Ein weiteres Beispiel: QQ verfügt über eine soziale Funktion namens „Freunde-Tags“. Sie können Ihre Freunde markieren, z. B. „große Schönheit“, „Tycoon“, „Ouba“ usw. Hier können Sie auch die Tags jedes Benutzers in einer Sammlung speichern .
Wenn Sie wissen möchten, wie viele bestimmte registrierte Benutzer oder IP-Adressen eine bestimmte Seite besucht haben, können Sie dies tun: SADD page:day1:
Implementierungsmethode:
Die interne Implementierung von set ist eine HashMap, deren Wert immer null ist. Tatsächlich wird sie durch die Berechnung des Hash schnell sortiert. Aus diesem Grund kann set feststellen, ob sich ein Mitglied im Set befindet.
Einführung: Sortierter Satz. Im Vergleich zum Satz wird die Bewertung des Elements auch bereitgestellt, wenn das Element in den Satz eingefügt wird, und es kann automatisch nach der Bewertung sortiert werden.
Allgemeine Befehle:
zadd, zrange, zrem, zcard usw.
Verwendungsszenarien:
Speichern Sie eine geordnete und nicht duplizierte Sammlungsliste. Beispielsweise kann die öffentliche Timeline von Twitter mit der Veröffentlichungszeit als Ergebnis gespeichert werden , damit Sie die Zeit automatisch nach Zeit sortieren können.
Sie können beispielsweise eine gewichtete Warteschlange erstellen, bei der die Punktzahl für normale Nachrichten 1 und die Punktzahl für wichtige Nachrichten 2 beträgt. Dann kann der Arbeitsthread die Arbeitsaufgaben in der umgekehrten Reihenfolge der Punktzahl abrufen. Priorisieren Sie wichtige Aufgaben.
Verarbeitung abgelaufener Elemente: Verwenden Sie die Unix-Zeit als Schlüssel, um die Liste nach Zeit sortiert zu halten. Rufen Sie current_time und time_to_live ab, um die schwierige Aufgabe, abgelaufene Artikel zu finden, abzuschließen. Eine weitere Hintergrundaufgabe verwendet ZRANGE...WITHSCORES, um abgelaufene Einträge abzufragen und zu löschen.
Implementierungsmethode:
Der sortierte Redis-Satz verwendet intern HashMap und SkipList, um die Speicherung und Reihenfolge von Daten sicherzustellen, während die Skip-Liste alle Mitglieder speichert Die in der HashMap gespeicherte Punktzahl kann eine höhere Sucheffizienz erzielen und ist relativ einfach zu implementieren.
Empfohlenes Lernen: Redis-Video-Tutorial
Das obige ist der detaillierte Inhalt vonFassen Sie Redis-Datentypen und Nutzungsszenarien zusammen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!