Heim > Datenbank > Redis > Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten

Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten

WBOY
Freigeben: 2022-04-01 13:31:13
nach vorne
2827 Leute haben es durchsucht

Dieser Artikel vermittelt Ihnen relevantes Wissen über Redis. Er stellt hauptsächlich verwandte Themen zu Datenstrukturen vor, einschließlich Zeichenfolgen, Listen, Hashes, geordneten Mengen usw. Ich hoffe, dass er für alle nützlich sein wird.

Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten

Empfohlenes Lernen: Redis-Lerntutorial

Redis-Datenstruktur: String (Zeichenfolge), Liste (Liste), Hash (Hash), Set (Satz), Shorted Set (geordneter Satz)

Zugrunde liegende Datenstruktur : einfache dynamische Zeichenfolge, doppelt verknüpfte Liste, komprimierte Liste, Hash-Tabelle, Sprungliste, Ganzzahl-Array
Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten
1. Hash-Tabelle: Eine Hash-Tabelle ist eigentlich ein Array, und jedes Element im Array wird als Hash-Bucket bezeichnet. Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten
Hash-Konflikte und Rehash können zu einer Blockierung des Betriebs führen.
Die Methode von Redis zur Lösung von Hash-Konflikten ist das Ketten-Hashing, während Rehash darin besteht, die Anzahl vorhandener Hash-Buckets zu erhöhen. 🔜 Speicherplatz der Hash-Tabelle 1
Der zweite Schritt umfasst eine große Anzahl von Datenkopiervorgängen. Wenn alle Daten in der Hash-Tabelle 1 auf einmal migriert werden, wird der Thread blockiert und andere Anforderungen werden nicht bedient. Um dieses Problem zu vermeiden, verwendet Redis progressives Rehash Das Ende der Liste und die Liste Die Anzahl der Einträge in der Mitte Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten Die komprimierte Liste hat auch ein Element zlend am Ende der Tabelle, um das Ende der Liste darzustellen

Liste überspringen: Eine geordnete verknüpfte Liste kann nur gefunden werden Elemente nacheinander, während eine Sprungliste einen mehrstufigen Index auf der Grundlage der verknüpften Liste hinzufügt. Durch mehrere Sprünge wird eine schnelle Positionierung der Daten erreicht

Die zeitliche Komplexität der folgenden fünf Strukturen
Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten

String Typ
Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und TextenString-Typ ist nicht für alle Szenarien geeignet. Er weist einen offensichtlichen Mangel beim Speichern von Daten auf. Da der String-Typ zusätzlichen Speicherplatz benötigt, um Datenlänge, Speicherplatznutzung und andere Informationen aufzuzeichnen, werden diese Informationen auch als Metadaten bezeichnet.
Wenn die gespeicherten Daten Zeichen enthalten, wird die Zeichenfolge mithilfe einer einfachen dynamischen Zeichenfolgen-SDS-Struktur gespeichert. Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten

len ist die verwendete Länge von buf und alloc ist die tatsächlich zugewiesene Länge von buf. Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten Da es viele Redis-Datentypen gibt, unterschiedliche Datentypen Es müssen dieselben Metadaten aufgezeichnet werden, daher verwendet Redis eine RedisObject-Struktur, um diese Metadaten einheitlich aufzuzeichnen.

Beim Speichern des Long-Typs wird der RedisObject-Zeiger direkt ganzzahligen Daten zugewiesen, sodass keine zusätzlichen Zeiger erforderlich sind, auf die verwiesen wird it. Ganzzahl, wodurch der Platzaufwand für Zeiger gespart wird.

Wenn die gespeicherte Zeichenfolge weniger als 44 Bytes beträgt, werden SDS und Metadaten einem kontinuierlichen Speicherbereich zugewiesen, der als Embstr-Codierung bezeichnet wird.
Wenn die gespeicherte Zeichenfolge größer als 44 Bytes ist, werden SDS und Metadaten separat gespeichert und als Rohcodierung bezeichnet

Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten
Darüber hinaus verwendet Redis eine globale Hash-Tabelle, um alle Schlüssel-Wert-Paare zu speichern. Jedes Element in der Hash-Tabelle ist eine dictEntry-Struktur, die verwendet wird, um auf ein Schlüssel-Wert-Paar zu verweisen value+next verwendet 24 Bytes, belegt aber tatsächlich 32 Bytes. Dies liegt daran, dass jemalloc eine Potenz von 2 findet, die größer als N ist, aber N am nächsten kommt, basierend auf der Anzahl der von uns angewendeten Bytes für N, also Kann die Anzahl häufiger Zuweisungen reduzieren.
Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten
Welche Datenstruktur kann verwendet werden, um Speicherplatz zu sparen?
Komprimierte Liste: zlbytes repräsentiert die Länge der Liste, zltail repräsentiert den Endoffset der Liste, zllen repräsentiert die Anzahl der Einträge in der Liste, zlend repräsentiert das Ende der Liste, perv_len repräsentiert die Länge des vorherigen Eintrags, Kodierung stellt die Kodierungsmethode dar, len stellt seine eigene Länge dar, Schlüssel sind die tatsächlich gespeicherten Daten. Redis implementiert Liste, Hash und sortierte Menge basierend auf einer komprimierten Liste

Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten
Wie speichere ich einwertige Schlüssel-Wert-Paare mithilfe von Satztypen?
Beim Speichern von Einzelwert-Schlüssel-Wert-Paaren können Sie die sekundäre Codierung von Hash verwenden, bei der der Einzelwertwert in zwei Teile aufgeteilt wird. Der erste Teil wird als Schlüssel des Hash verwendet und der zweite Teil wird verwendet als Wert des Hash

以图片 ID 1101000060 和图片存储对象 ID 3302000080 为例,我们可以把图片 ID 的前 7 位(1101000)作为 Hash 类型的键,把图片 ID 的最后 3 位(060)和图片存储对象 ID 分别作为 Hash 类型值中的 key 和 value。127.0.0.1:6379> info memory# Memoryused_memory:1039120127.0.0.1:6379> hset 1101000 060 3302000080(integer) 1127.0.0.1:6379> info memory# Memoryused_memory:1039136
Nach dem Login kopieren

Hash Der Typ hat zwei zugrunde liegende Implementierungsstrukturen: 1. Komprimierte Liste 2. Hash-Tabelle
Es gibt zwei Schwellenwerte in der Hash-Liste. Sobald diese beiden Schwellenwerte überschritten werden, wird sie aus der komprimierten Liste konvertiert list zu einer Hash-Tabelle
Dargestellt durch hash-max-ziplist-entries Die maximale Anzahl von Elementen in der Hash-Liste, die beim Speichern mit einer komprimierten Liste festgelegt wird
hash-max-ziplist-value gibt die maximale Länge eines einzelnen Elements des Hashs an Wird beim Speichern mit einer komprimierten Liste festgelegt.

Statistikmodus festlegen. 1. Aggregationsstatistik 2.HyperLogLog
3.GEO:

GEO-Datentyp für LBS-Anwendungen
Die zugrunde liegende Struktur von GEO basiert auf Sorted Set, das nach der Gewichtung von Elementen sortiert werden kann und die Gewichtsbewertung unterstützt sortiert Set ist eine Gleitkommazahl (Float-Typ), und der Längen- und Breitengrad sind zwei Zahlen, daher ist GeoHash-Kodierung erforderlich.

Die GeoHash-Kodierung erfolgt über „Binärintervall, Intervallkodierung“.

Konvertieren Sie zuerst den Längen- und Breitengrad in ein codiertes Format und führen Sie dann den Crossover durch.


Tatsächlich ist der Zweck des Crossovers das in der Abbildung unten gezeigte Konzept. Nach dem Crossover können Sie tatsächlich ein Quadrat in den beiden lokalisieren Wir verwenden die Bereichsabfrage „Sorted Set“, um ähnliche Codierungswerte zu erhalten. Im tatsächlichen geografischen Raum sind beispielsweise 1110011101 benachbarte Codierungen vorhanden tatsächliche Quadrate nicht benachbarter Situationen. Um diese Situation zu vermeiden, können wir 4 oder 8 Quadrate um einen bestimmten Längen- und Breitengrad gleichzeitig abfragen.
Wie bedient man den GEO-Typ?
Bei der Verwendung von GEO-Typen verwenden wir häufig die beiden Befehle GEOADD und GEORADIUS.
GEOADD: Wird zum Aufzeichnen eines Satzes von Längen- und Breitengradinformationen und einer entsprechenden ID in einer GEO-Typensammlung verwendet. Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten Verwendung: Gehen Sie davon aus, dass die Fahrzeug-ID 33 und der Breiten- und Längengrad (116.034579, 39.030452) ist. Wir können eine GEO-Sammlung verwenden, um den Breiten- und Längengrad aller Fahrzeuge zu speichern. Sie müssen lediglich den folgenden Befehl ausführen, um die aktuelle Längen- und Breitenposition des Fahrzeugs mit der ID-Nummer 33 in GEO zu speichern.

GEOADD cars:locations 116.034579 39.030452 33
Nach dem Login kopieren

GEORADIUS: Fragen Sie basierend auf der Position des eingegebenen Längen- und Breitengrads andere Elemente innerhalb eines bestimmten Bereichs ab, der auf diesem Längen- und Breitengrad zentriert ist.

Wie kann der Datentyp angepasst werden? Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten
Die grundlegende Objektstruktur von Redis umfasst Typ, Codierung, LRU und Refcount, *ptr
Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten
Entwickeln Sie eine Datenstruktur mit dem Namen NewTypeObject, die die folgenden vier Schritte umfasstDetaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten

Wie speichere ich Zeitreihendaten in Redis?

1. Speichern basierend auf Hash und sortiertem Satz: Warum sollten wir basierend auf zwei Datenstrukturen abfragen?
Der Hash-Typ kann eine schnelle Einzelschlüsselabfrage realisieren, die den Anforderungen der Zeitreihen-Einzelschlüsselabfrage entspricht. Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten
Der Hash-Typ hat jedoch den Nachteil, dass er keine Bereichsabfrage unterstützt. Wir müssen Sorted Set verwenden, da es nach der Gewichtsbewertung der Elemente sortiert wird. Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten
Wie stellen wir also die Atomizität dieser beiden Operationen sicher?
Sie müssen zwei Befehle übergeben: MULTI und EXEC:
MULTI bedeutet Start. Nach Erhalt dieses Befehls stellt Redis den Befehl in die Warteschlange.
EXEC bedeutet Ende. Nach Erhalt dieses Befehls beginnt es mit der Ausführung der Befehle in der Warteschlange Detaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten Aber wenn Hash und Sorted Set verwendet werden, werden nur Bereichsabfragen, aber keine Aggregatberechnungen unterstützt. Wenn Aggregationsberechnungen auf dem Client durchgeführt werden, kommt es zu einer großen Menge an Netzwerkübertragungen. Daher können aggregierte Berechnungen für Redis über RedisTimeSeries durchgeführt werden.

Empfohlenes Lernen:

Redis-Lerntutorial

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Redis-Datenstrukturwissens mit Bildern und Texten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage