Heim >Datenbank >Redis >Lassen Sie uns über den String-Typ in der Redis-Datenstruktur sprechen

Lassen Sie uns über den String-Typ in der Redis-Datenstruktur sprechen

青灯夜游
青灯夜游nach vorne
2021-12-08 09:52:491970Durchsuche

Dieser Artikel führt Sie durch den String-Typ in der Redis-Datenstruktur und spricht über die KV-Speicherstruktur von Redis. Ich hoffe, er wird Ihnen hilfreich sein!

Lassen Sie uns über den String-Typ in der Redis-Datenstruktur sprechen

Redis wird oft nur als verteilter KV-Cache verwendet, aber sie wissen nicht, dass sich darunter viele unbekannte Geheimnisse verbergen. [Verwandte Empfehlungen: Redis-Video-Tutorial]

String-Typ

String ist der grundlegendste Datentyp, der von Redis unterstützt wird. Schauen wir uns zunächst String, seine Datenstruktur und Speicherung an.

SDS neu definieren, um String zu speichern

Wie wir alle wissen, ist Redis in C-Sprache geschrieben und die C-Sprache hat keinen String-Typ, sondern nur char[], und die Größe muss während der Initialisierung angegeben werden. Um Funktionen wie dynamisches Hinzufügen und Erweitern wie den Befehl incr und den Befehl append zu realisieren, definiert und verwaltet Redis ein SDS (Simple Dynamic String) zur Implementierung dieser Funktionen.

Werfen wir zunächst einen Blick auf die im Redis-Quellcode definierte Datenstruktur. Um Platz zu sparen, gibt es hier 5 Typen.

Lassen Sie uns über den String-Typ in der Redis-Datenstruktur sprechen

1. Um die Länge von char[] zu erhalten, müssen Sie das Array durchlaufen. Die Zeitkomplexität von len(char[]) ist O(n);
2 Geben Sie in der Sprache C ein, nur char[] muss zuerst die Länge zuweisen, char[] hat eine vorab zugewiesene Länge und muss erweitert werden, nachdem die Daten gewachsen sind

3 . Die niedrigsten 3 Bits werden verwendet, um den Header-Typ anzuzeigen. Es gibt 5 Arten von Headern und in sds.h gibt es konstante Definitionen.
4. buf[]: char-Array in C-Sprache, verwenden Sie '

Redis‘ KV-Speicherstruktur

In Redis wird der gesamte Speicher in Form von KV-Schlüssel-Wert-Paaren gespeichert. K ist ein String-Typ, also SDS; V kann ein String, eine Liste, ein Hash usw. sein Unterstützte Datenstrukturen) V wird nicht direkt auf einen bestimmten Typ festgelegt, sondern ist mit einer Schicht von redisObject gekapselt; der PTR-Zeiger zeigt speziell auf die tatsächlich gespeicherte Datenstruktur.

Und um Platz zu sparen, speichert Redis PTR-Zeiger auch auf unterschiedliche Weise. Einerseits wird der Zeiger in RedisObject beim Speichern einer Ganzzahl vom Typ Long direkt Ganzzahldaten zugewiesen, sodass keine zusätzlichen Zeiger erforderlich sind . Es zeigt wieder auf eine Ganzzahl und spart so den Platzbedarf von Zeigern. Wenn andererseits Zeichenfolgendaten gespeichert werden und die Zeichenfolge kleiner oder gleich 44 Byte ist, stellen die Metadaten, Zeiger und SDS in RedisObject einen kontinuierlichen Speicherbereich dar, wodurch eine Speicherfragmentierung vermieden wird. Diese Layoutmethode wird auch als Embstr-Codierungsmethode bezeichnet. Wenn die Zeichenfolge größer als 44 Byte ist, nimmt die Datenmenge im SDS natürlich zu, und Redis ordnet SDS und RedisObject nicht mehr gemeinsam zu, sondern weist SDS unabhängigen Speicherplatz zu und verwendet einen Zeiger, um auf die SDS-Struktur zu verweisen . Diese Layoutmethode wird als Rohcodierungsmodus bezeichnet. Wie im Bild gezeigt

Lassen Sie uns über den String-Typ in der Redis-Datenstruktur sprechen

  • Embstr-Codierung
    Speichert kurze Zeichenfolgen und einmalige Speicherzuweisung;
    Es ist schreibgeschützt. Wenn der Inhalt geändert wird, wird er zur Rohcodierung (auch wenn er 44 nicht überschreitet). Bytes) ;
  • Rohkodierung
    kann mehrfach Speicherplatz zuweisen, um lange Zeichenfolgen mit mehr als 44 Bytes zu speichern.

raw Wenn die native SDS-Zeichenlänge auf weniger als 44 reduziert wird, wird sie dann in die Embstr-Codierung umgewandelt?
Nein; die zugrunde liegende Codierung von Redis ist nach der Konvertierung irreversibel (kein Rollback).

Zusammenfassung

Redis ist eine häufig verwendete Caching-Middleware. Wir müssen ihre Datenstruktur und -speicherung klar verstehen, damit wir bei der Verwendung eine geeignetere Datenstruktur und Speicherschätzung auswählen können.

Redis-Speicherberechnungsadresse http://www.redis.cn/redis_memory/

Weitere Programmierkenntnisse finden Sie unter: Einführung in die Programmierung! !

Das obige ist der detaillierte Inhalt vonLassen Sie uns über den String-Typ in der Redis-Datenstruktur sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen