Heim > häufiges Problem > So implementieren Sie die fünf Datenstrukturen von Redis auf der zugrunde liegenden Ebene

So implementieren Sie die fünf Datenstrukturen von Redis auf der zugrunde liegenden Ebene

醉折花枝作酒筹
Freigeben: 2023-01-13 00:38:32
Original
5795 Leute haben es durchsucht

Implementierungsmethode: 1. Jede Datenstruktur verfügt über eine eigene zugrunde liegende interne Codierungsimplementierung, und es gibt mehrere Implementierungen, sodass Redis im entsprechenden Szenario die entsprechende interne Codierung auswählt. 2. Jede Datenstruktur verfügt über mehr als zwei Arten interner Codierung 3. Interne Codierung kann als interne Implementierung verschiedener externer Datenstrukturen verwendet werden.

So implementieren Sie die fünf Datenstrukturen von Redis auf der zugrunde liegenden Ebene

Die Betriebsumgebung dieses Tutorials: Windows 7-System, Redis Version 5.0.10, DELL G3-Computer.

Redis verfügt über fünf grundlegende Datenstrukturen: String, Hash, Set, Zset und Liste. Im Folgenden wird erläutert, wie die unterste Ebene sie beim Herunterladen der Redis 3.0.6-Version implementiert.

Zusammenfassend

(1) Jede Datenstruktur verfügt über eine eigene zugrunde liegende interne Codierungsimplementierung, und es gibt mehrere Implementierungen, sodass Redis im entsprechenden Szenario die entsprechende interne Codierung auswählt.

(2) Sie können sehen, dass jede Datenstruktur mehr als zwei interne Codierungsimplementierungen hat. Beispielsweise enthält die String-Datenstruktur drei interne Codierungen: raw, int und embstr.

(3) Gleichzeitig können einige interne Codierungen als interne Implementierungen verschiedener externer Datenstrukturen verwendet werden. Ziplist ist beispielsweise eine interne Codierung, die Hash, List und Zset gemeinsam haben.

Dynamic String SDS

SDS ist die Abkürzung für „Simple Dynamic String“. Zeichenfolgen, die in allen Szenarien in Redis erscheinen, werden grundsätzlich von SDS implementiert:

  • Alle nicht numerischen Schlüssel, wie zum Beispiel: key msg in set msg „hello“

  • Der Wert des String-Datentyps, zum Beispiel: Wert „hello“ in set msg „hello“

  • „String-Wert“ in Nicht-String-Datentypen, wie zum Beispiel: „Apfel“ „Banane“ in rpush Früchte „Apfel“ „Banane“

SDS sieht aus Dies:

So implementieren Sie die fünf Datenstrukturen von Redis auf der zugrunde liegenden Ebene

free: Wie viel Platz ist noch übrig?

len: String-Länge

buf: Gespeichertes Zeichenarray

Speicherplatz-Vorabzuweisung

Um den Speicheraufwand für die Änderung des String-Agenten zu reduzieren Bei der Anzahl der Zuweisungen wendet SDS die Strategie der „einmaligen Verwaltung“ an:

  • Wenn die SDS-Länge nach der Änderung

  • Wenn die SDS-Länge >= 1 MB beträgt Nach der Änderung erreicht die Erweiterung nicht nur die geänderte Länge, sondern verfügt auch über zusätzlichen Speicherplatz von 1 MB.

Lazy Space Release

Um Speicherneuzuweisungsvorgänge beim Verkürzen von Zeichenfolgen zu vermeiden, gibt SDS beim Verkürzen der Daten nicht sofort Speicherplatz frei.

int

sind alle Arten von Zahlen, die in Redis gespeichert sind, einschließlich des absichtlich hinzugefügten „“ lpop, rpop

sieht so aus:

ist in zwei Teile unterteilt:

„Koordinationsteil“: orange

Kopf: zeigt auf den Kopf einer bestimmten doppelt verketteten Liste

So implementieren Sie die fünf Datenstrukturen von Redis auf der zugrunde liegenden Ebene

Schwanz: zeigt auf das Ende einer bestimmten doppelt verketteten Liste

    • len: die Länge der doppelt verketteten Liste
    • „Spezifische Implementierung“: blau

    • hat den Vorgänger pre und den Nachfolger next
  • Die doppelt verknüpfte Liste besteht aus zwei Datenstrukturen: list und listNode.
    • Verwandte Tutorial-Empfehlungen:
    • Redis-Tutorial

Das obige ist der detaillierte Inhalt vonSo implementieren Sie die fünf Datenstrukturen von Redis auf der zugrunde liegenden Ebene. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage