Heim  >  Artikel  >  Backend-Entwicklung  >  Was sind die Datentypen von Redis? Zusammenfassung verschiedener Datentypen von Redis

Was sind die Datentypen von Redis? Zusammenfassung verschiedener Datentypen von Redis

不言
不言Original
2018-09-13 17:20:386788Durchsuche

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.

Vorwort

  1. 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.

  2. Es handelt sich um einen In-Memory-Datenstrukturserver, der als Datenbank-, Cache- und Nachrichtenwarteschlangen-Broker verwendet werden kann.

  3. Gewährleistet einen Hochgeschwindigkeitszugriff auf alle Daten im Speicher und bietet gleichzeitig die Funktion der Datenlandung. Dies ist das wichtigste anwendbare Szenario von Redis.

  4. 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.

  5. Redis unterstützt Datentypen wie Zeichenfolgen, Hash-Tabellen, Listen, Mengen, geordnete Mengen, Bitmaps und Hyperloglogs.

  6. Die am häufigsten verwendeten Datentypen von Redis: Stirng, Hash, List, Set, Sorted Set, Pub/Sub, Transaktionen.

String-Typ

  1. Der String-Typ ist ein einfacher Schlüsselwerttyp. Wert ist nicht nur eine Zeichenfolge, sondern auch eine Zahl.

  2. Allgemeine Befehle: set, get, decr, incr, mget usw.

  3. 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.

Allgemeine Befehle: hget, hset, hgetall usw.
  1. Anwendungsszenario: Speichern Sie einige strukturierte Daten wie Spitzname, Alter, Geschlecht, Punkte usw. des Benutzers und speichern Sie Benutzerinformationsobjektdaten.
  2. Nehmen wir ein einfaches Beispiel, um das Anwendungsszenario von Hash zu beschreiben. Beispielsweise speichern wir Daten eines Benutzerinformationsobjekts, einschließlich der folgenden Informationen:
  3. (1) Die Benutzer-ID ist der zu durchsuchende Schlüssel
  4. (2) Der gespeicherte Wert umfasst Name, Alter, Geburtstag und andere Informationen
  5. 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.
  6. (3) Auf diese Weise können Änderungen und Zugriffe auf die Daten direkt über den Schlüssel erfolgen Der Schlüssel der internen Karte (in Redis als „intern“ bezeichnet) ist der Schlüssel der Karte, d. h. Schlüssel (Benutzername-ID) + Feld (Attributname) können die entsprechenden Attributdaten bedienen.

2. Hinweis:

(1) Redis stellt eine Schnittstelle (hgetall) bereit, um alle Attributdaten direkt abzurufen. Wenn jedoch viele Mitglieder der internen Karte vorhanden sind, muss die gesamte Karte durchlaufen werden arbeiten.

(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.


Der Listentyp wird häufig in Nachrichtenwarteschlangendiensten verwendet, um den Nachrichtenaustausch zwischen mehreren Programmen abzuschließen.

  1. Allgemeine Befehle: lpush, rpush, lpop, rpop, lrange usw.

  2. Anwendungsszenario: Implementieren Sie Funktionen wie das Ranking der neuesten Nachrichten sowie eine Nachrichtenwarteschlange.

  3. Einfache Beispielanalyse für eine Nachrichtenwarteschlange:

  4. (1) Angenommen, eine Anwendung führt lpush aus, um der verknüpften Liste neue Elemente hinzuzufügen ein Programm wird „Produzent“ genannt;

    (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.
  5. (4) Wenn außerdem die Geschwindigkeit des Produzenten höher ist als die Geschwindigkeit des Verbrauchers, nimmt die Länge der Nachrichtenwarteschlange weiter zu, was mit der Zeit viel Speicherplatz belegt.
  6. (5) Daher gilt: Sie können den Befehl brpop verwenden, der nur dann zurückkehrt, wenn ein Element vorhanden ist. Andernfalls wird er bis zum Timeout blockiert und null zurückgegeben.

    Set-Typ


Der Set-Typ ist eine ungeordnete Sammlung von String-Typen.


Das Konzept einer Menge ist eine Kombination aus einer Reihe sich nicht wiederholender Werte.

  1. Das Mengenelement kann bis zu (2 hoch 32. Potenz - 1) Elemente enthalten.

  2. Die interne Implementierung von set ist eine HashMap, deren Wert immer null ist.

  3. Die von set bereitgestellte externe Funktion ähnelt list, einer Listenfunktion. Das Besondere ist, dass Duplikate während des Sets automatisch entfernt werden können.

  4. Allgemeine Befehle: sadd, spop, smembers, sunion usw.

  5. Wenn Sie eine Liste von Daten speichern müssen und keine doppelten Daten möchten, ist set eine gute Wahl.

  6. Und set bietet eine wichtige Schnittstelle zur Bestimmung, ob sich ein Mitglied in einer Set-Sammlung befindet, die die Liste nicht bereitstellen kann.

  7. 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.

  8. 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.

Zset-Typ

  1. 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.

  2. Sortierter Satz ist einfügungsgeordnet, d. h. automatisch sortiert.

  3. Allgemeine Befehle: zadd, zrange, zrem, zcard usw.

  4. Wenn Sie eine geordnete und nicht duplizierte Liste von Sätzen benötigen, können Sie die sortierte Satzdatenstruktur wählen.

  5. 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.

pub/sub

  1. Die drei Befehle „subscribe“, „unsubscribe“ und „publish“ implementieren das Veröffentlichen und Abonnieren von Generika.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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;

  7. 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.

  8. 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.

  9. 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.

  10. 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.

  11. 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;

  12. 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

  1. Transaktionen

redis Eine Transaktion kann mehrere Befehle gleichzeitig ausführen.

  1. Eine Transaktion durchläuft vom Start bis zur Ausführung drei Phasen:

  2. (1) Transaktion starten

    (2) Befehl in die Warteschlange stellen
  3. (3) Transaktion ausführen

Eine 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-Datentyp--string

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn