In diesem Artikel erfahren Sie, welche Redis-Datentypen es gibt. Die Zusammenfassung jedes Datentyps von Redis hat einen bestimmten Referenzwert. Freunde in Not können sich darauf beziehen.
Redis ist eine Open-Source-Protokolltyp-Schlüsselwertdatenbank, die in der ANSI-C-Sprache geschrieben ist, Netzwerke unterstützt, auf Speicher basieren kann und auch persistiert werden und stellt APIs in mehreren Sprachen bereit.
Es handelt sich um einen In-Memory-Datenstrukturserver, der als Datenbank-, Cache- und Nachrichtenwarteschlangen-Broker verwendet werden kann.
Gewährleistet einen Hochgeschwindigkeitszugriff auf alle Daten im Speicher und bietet gleichzeitig die Funktion der Datenlandung. Dies ist das wichtigste anwendbare Szenario von Redis.
reids verfügt über integrierte Replikation, Lua-Skripte, LRU-Wiederherstellung, Transaktionen und verschiedene Ebenen von Festplattenpersistenzfunktionen. Außerdem bietet es hohe Verfügbarkeit durch Redis Sentinel und automatische Partitionierung durch Redis Cluster.
Redis unterstützt Datentypen wie Zeichenfolgen, Hash-Tabellen, Listen, Mengen, geordnete Mengen, Bitmaps und Hyperloglogs.
Die am häufigsten verwendeten Datentypen von Redis: Stirng, Hash, List, Set, Sorted Set, Pub/Sub, Transaktionen.
Der String-Typ ist ein einfacher Schlüsselwerttyp. Wert ist nicht nur eine Zeichenfolge, sondern auch eine Zahl.
Allgemeine Befehle: set, get, decr, incr, mget usw.
Redis bietet nicht nur die gleichen Get-, Set-, Incr-, Decr- und anderen Vorgänge wie Memcached, sondern auch die folgenden Vorgänge:
(1) Ermitteln Sie die Länge der Zeichenfolge. (2) Hängen Sie den Inhalt an die Zeichenfolge an. (3) Legen Sie einen bestimmten Abschnitt der Zeichenfolge fest des String-Bits (Bit);
(5) Legen Sie den Inhalt einer Reihe von Strings stapelweise fest.
Hash ist besonders geeignet für Gegenstände aufbewahren.
(1) Die Benutzer-ID ist der zu durchsuchende Schlüssel
1 > (1) Der Schlüssel ist die Benutzer-ID, der Wert ist eine Karte.
(2) Der Schlüssel dieser Karte ist der Attributname des Mitglieds, und der Wert ist der Attributwert.2. Hinweis:
(2) Aufgrund des Single-Thread-Modells von Redis kann dieser Durchlaufvorgang zeitaufwändig sein und andere Clientanfragen werden möglicherweise überhaupt nicht beantwortet.
Listentyp
Der Listentyp ist im Wesentlichen eine doppelt verknüpfte Liste, in der jedes Element vom Typ String ist. Dadurch kann die Liste entweder als Stapel oder verwendet werden eine Warteschlange.
(2) Während eine andere Anwendung die RPOP-Operation ausführt, um Elemente aus der verknüpften Liste zu entfernen, nennen wir ein solches Programm „Konsumer“;
(3) Während des Prozesses Bei der Anzahl der Verbraucher, die Nachrichten konsumieren, muss rpop kontinuierlich aufgerufen werden, um zu prüfen, ob ausstehende Nachrichten in der Liste vorhanden sind. Bei jedem Aufruf wird ein Link initiiert, was unnötige Verschwendung verursacht.
Der Set-Typ ist eine ungeordnete Sammlung von String-Typen.
Und set bietet eine wichtige Schnittstelle zur Bestimmung, ob sich ein Mitglied in einer Set-Sammlung befindet, die die Liste nicht bereitstellen kann.
Mithilfe der Set-Datenstruktur können einige kollektive Daten gespeichert werden. Beispielsweise können in einer Weibo-Anwendung alle Follower eines Benutzers und alle seine Fans in einem Set gespeichert werden in einer Sammlung gespeichert werden.
Redis bietet auch Operationen wie Schnittmenge, Vereinigung und Differenz für Mengen, die sehr praktisch sein können, um Funktionen wie gemeinsame Aufmerksamkeit, gemeinsame Vorlieben und Freunde zweiten Grades zu implementieren.
Wie der Satz ist auch der sortierte Satz eine Sammlung von Elementen vom Typ Zeichenfolge. Der Unterschied besteht darin, dass jedem Element eine doppelte Typbewertung zugeordnet ist und die Reihenfolge der Elemente durch die Bewertung bestimmt wird.
Sortierter Satz ist einfügungsgeordnet, d. h. automatisch sortiert.
Allgemeine Befehle: zadd, zrange, zrem, zcard usw.
Wenn Sie eine geordnete und nicht duplizierte Liste von Sätzen benötigen, können Sie die sortierte Satzdatenstruktur wählen.
Anwendungsbeispiel:
(1) Um beispielsweise die Noten der gesamten Klasse zu speichern, kann der eingestellte Wert die Schülernummer sein des Mitschülers und Punktestand Es können Noten sein.
(2) Ranking-Anwendung, Auflistung der TopN-Benutzer basierend auf Punktzahlen usw.
Die drei Befehle „subscribe“, „unsubscribe“ und „publish“ implementieren das Veröffentlichen und Abonnieren von Generika.
Der Absender (der Client, der die Informationen sendet) sendet die Informationen nicht direkt an den spezifischen Empfänger (den Client, der die Informationen empfängt), sondern sendet die Informationen an den Kanal (Kanal). ), leitet der Kanal die Informationen dann an alle Abonnenten weiter, die sich für den Kanal interessieren.
Der Absender muss keine Informationen über den Abonnenten kennen, und der Abonnent muss nicht wissen, welcher Client ihm die Informationen gesendet hat, er muss nur auf den Kanal achten, der ihn verwendet interessiert es.
Veröffentlichen/Abonnieren in Redis, das sehr leichtgewichtig und prägnant gestaltet ist. Es bietet jedoch noch keine Informationen zur Nachrichtenpersistenz und andere Aspekte auf Unternehmensebene.
Ein Redis-Client veröffentlicht Nachrichten und mehrere andere Redis-Clients abonnieren Nachrichten. Sobald sie gesendet werden, können Redis-Nachrichten nicht gespeichert werden nur get Nachdem die Nachricht abonniert wurde, können die vorherigen Nachrichten im Kanal nicht abgerufen werden.
Der Nachrichtenherausgeber, also der Veröffentlichungsclient, benötigt keinen exklusiven Link. Sie können denselben Redis-Client-Link verwenden, um andere Vorgänge (z. B. Incr) auszuführen. ) während der Veröffentlichung der Nachricht;
Der Nachrichtenabonnent, also der Abonnement-Client, benötigt einen exklusiven Link, das heißt, während des Abonnementzeitraums kann der Redis-Client keine anderen Vorgänge durchsetzen.
Zu diesem Zeitpunkt wartet der Client auf blockierende Weise auf Nachrichten von der Veröffentlichungsseite, daher muss zum Abonnieren ein separater Link verwendet oder sogar in einem zusätzlichen Thread verwendet werden.
Die TCP-Standardverbindungszeit ist festgelegt. Wenn die Unterseite die Pub-Seitennachricht in dieser Welt nicht empfängt oder die Pub-Seite keine Nachricht generiert, wird die Unterseitenverbindung hergestellt zwangsweise recycelt.
Dies erfordert spezielle Mittel zur Lösung. Verwenden Sie einen Timer, um den Keep-Alive-Mechanismus zwischen Pub und Sub zu simulieren. Die Timerzeit darf die maximale TCP-Verbindungszeit nicht überschreiten.
Sobald das Abonnementende die Verbindung trennt, gehen einige Nachrichten verloren, dh die Nachrichten während des Verbindungsfehlerzeitraums gehen verloren. Daher muss hier die Redis-Liste berücksichtigt werden für Persistenz;
Wenn Sie sich große Sorgen um jede Nachricht machen, sollten Sie einige zusätzliche Zusatzarbeiten auf Basis von Redis durchführen. Wenn Sie möchten, dass das Abonnement dauerhaft ist, dann sind die folgenden Designideen hilfreich kann als Referenz verwendet werden:
(1) Abonnieren-Seite: Fügen Sie zuerst „Abonnenten-ID“ zu einer festgelegten Sammlung hinzu. Diese festgelegte Sammlung speichert „aktive Abonnenten“ und markiert sie eindeutig Abonnent. Dieser Satz Für die „Aktive Abonnentensammlung“.
(2) Das Abonnementende startet den Abonnementvorgang und erstellt eine Listendatenstruktur mit der Abonnenten-ID als Schlüssel. Diese Liste wird als „Abonnentennachrichtenwarteschlange“ bezeichnet > (3) Veröffentlichungsseite: Nachdem jede Nachricht veröffentlicht wurde, muss die Veröffentlichungsseite die aktive Abonnentensammlung durchlaufen und die veröffentlichte Nachricht nacheinander an das Ende jeder „Abonnentennachrichtenwarteschlange“ anhängen (4). Wir können grundsätzlich garantieren, dass jede veröffentlichte Nachricht dauerhaft in jeder „Abonnentennachrichtenwarteschlange“ gespeichert wird. (5) Auf der Abonnementseite wird jedes Mal, wenn eine Abonnementnachricht empfangen wird, eine Nachricht gelöscht an der Spitze Ihrer „Abonnenten-Nachrichtenwarteschlange“ (6) Wenn Sie beim Start des Abonnements feststellen, dass noch Datensätze in Ihrer „Abonnenten-Nachrichtenwarteschlange“ vorhanden sind, werden diese als erste Nachricht verbraucht und dann abonniert.
Die obige Methode kann sicherstellen, dass erfolgreich angekommene Nachrichten verbraucht werden müssen und nicht verloren gehen
Transaktionen
Eine Transaktion durchläuft vom Start bis zur Ausführung drei Phasen:
(1) Transaktion starten
(2) Befehl in die Warteschlange stellenEine Transaktion ist eine separate Isolationsoperation: Alle Befehle in der Transaktion werden serialisiert und der Reihe nach ausgeführt.
Während der Ausführung der Transaktion wird diese nicht durch Befehlsanfragen anderer Clients unterbrochen.
Die Ausführung eines einzelnen Redis-Befehls ist atomar, aber Redis fügt keinen Mechanismus zur Aufrechterhaltung der Atomizität der Transaktion hinzu, sodass die Ausführung der Redis-Transaktion nicht atomar ist.
Eine Transaktion kann als gepacktes Batch-Ausführungsskript verstanden werden, aber Batch-Anweisungen sind keine atomaren Operationen. Der Fehler einer Anweisung in der Mitte führt weder zum Rollback vorheriger Anweisungen noch zu nachfolgenden Anweisungen. Tu es nicht.
Die Multi-, Exec-, Discard- und Watch-Befehle sind die Grundlage von Redis-Transaktionen.
multi:
(1) Der Multi-Befehl wird zum Starten einer Transaktion verwendet und gibt immer ok zurück.
(2) Nachdem der Multi-Befehl ausgeführt wurde, kann der Client weiterhin beliebig viele Befehle an den Server senden
(3) Diese Befehle werden nicht sofort ausgeführt, sondern in eine Warteschlange gestellt
( 4) Wenn der Befehl exec aufgerufen wird, werden alle Befehle in der Warteschlange ausgeführt.
exec:
(1) Der exec-Befehl ist für das Auslösen und Ausführen aller Befehle in der Transaktion verantwortlich;
(2) Wenn der Client Multi to verwendet open a Wenn nach der Transaktion der Exec-Befehl aufgrund einer Verbindungsunterbrechung nicht erfolgreich ausgeführt werden kann, werden nicht alle Befehle in der Transaktion ausgeführt.
(3) Wenn der Client andererseits den Exec-Befehl nach dem Öffnen der Transaktion erfolgreich ausführt, werden alle Befehle in der Transaktion ausgeführt.
Discard:
(1) Durch den Aufruf von Discard kann der Client die Transaktionswarteschlange leeren und auf die Ausführung der Transaktion verzichten.
watch:
(1) Der Watch-Befehl kann Check-and-Set-Verhalten (CAS) für Redis-Transaktionen bereitstellen.
(2) watch ermöglicht die bedingte Ausführung des Exec-Befehls: Die Transaktion kann nur unter der Voraussetzung ausgeführt werden, dass nicht alle überwachten Schlüssel geändert wurden. Wenn diese Bedingung nicht erfüllt ist, wird die Transaktion nicht ausgeführt.
(3) Wenn Sie watch verwenden, um einen Schlüssel mit einer Ablaufzeit zu überwachen, kann die Transaktion auch dann noch ausgeführt werden, wenn der Schlüssel abläuft.
(4) watch kann mehrmals aufgerufen werden, und die Überwachung des Zustands wird von der Ausführung der watch bis zum Aufruf von exec wirksam.
(5) Wenn exec aufgerufen wird, wird die Überwachung des gesamten Zustands abgebrochen, unabhängig davon, ob die Transaktion erfolgreich ausgeführt wurde.
(6) Wenn der Client die Verbindung trennt, wird auch die Gesundheitsüberwachung des Clients abgebrochen.
Verwandte Empfehlungen:
Redis-Basisdatentyp und zugehörige Vorgänge
Das obige ist der detaillierte Inhalt vonWas sind die Datentypen von Redis? Zusammenfassung verschiedener Datentypen von Redis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!