dict: Schlüsselraum-Hash-Tabelle, die zum Speichern aller Schlüssel-Wert-Paare verwendet wird
expires: Ablaufzeit-Hash-Tabelle, in der die Ablaufzeit von Schlüsseln gespeichert wird 🎜#ready_keys: Entsperrschlüssel und entsprechende Clients, relativ zum blocking_keys-Attribut
watched_keys: Überwachungsschlüssel und entsprechende Clients, hauptsächlich für Transaktionen verwendet#🎜 🎜##🎜🎜 #
RedisObject
Die Schlüsselwerte von Redis sind alle redisObject-Objekte. Jedes Mal, wenn wir ein neues Schlüssel-Wert-Paar in der Redis-Datenbank erstellen, wird ein redisObject generiert Objekt für den Schlüsselnamen und ein redisObject-Objekt für den Schlüsselwert Beschreibung
type
wird verwendet, um den Typ darzustellen, der Redis entspricht
String, Liste, Hash, Satz , zset, stream usw. werden durch Aufzählungen dargestellt. Raw, Hashtable, Quicklist, Ziplist, Intset, Skiplist usw., dargestellt durch Aufzählung
lru
24 Bits, kann LFU auswählen oder LRU
Wenn es sich um LRU handelt, wird die letzte Zugriffszeit angezeigt. Wenn es sich um LFU handelt, werden die oberen 16 Bits verwendet, um die Zugriffszeit auf Minutenebene anzuzeigen, und die niedrigen 8 Bits werden verwendet, um die Zugriffszeit anzuzeigen Geben Sie die Zugriffshäufigkeit an. Je größer die Basis, desto schwieriger ist es, die Zugriffszeit zu erhöhen. (Beiden gemeinsam) Die Zugriffszeit ist ein Modulo einer Zahl, und die aktuelle Zeit ist ebenfalls modulo. Wenn die aktuelle Zeit größer als die Zugriffszeit ist, ist sie die Differenz zwischen den beiden Zahlen Zugriffszeit, es handelt sich um die aktuelle Zeit plus den Modulus und die Zugriffszeit. 🎜🎜#Der Anfangswert ist 1, was in praktischen Anwendungen wenig Referenzbedeutung hat# 🎜🎜#
ptr
Zeiger, belegt 8 Bytes und zeigt auf die Adresse der Daten
dict, läuft ab usw., Zeiger zeigen auf dieselbe Adresse
Befehl ist die zugehörige Operation für RedisObject.
Ändern Sie die Speichereliminierungsstrategie
Objekt-Leerlaufzeitschlüssel # Gibt die Leerlaufzeit des Schlüssels zurück, was eine ungefähre Beschreibung der Zeit seit dem letzten Lesen des Schlüssels ist geschrieben. Es ist im LFU-Modus nicht verfügbar int-Typ und ptr zeigen direkt auf die int-Typ-Adresse
embstr und raw
Die Zeichenfolge von Redis heißt SDS (Simple Dynamic String, einfache Zeichenfolge) und entspricht der Schlüssel, nicht ganzzahliger String-Wert
Wie Sie sehen können, ähnelt # 🎜🎜#SDS der ArrayList-Struktur von Java
. Es weist außerdem eine Anfangslänge zu und erweitert diese, wenn die Länge überschritten wird .
Redis legt fest, dass die Länge der Zeichenfolge 512 MB nicht überschreiten darf.
Wenn die Länge besonders kurz ist, verwenden Sie zum Speichern das Embstr-Formular. Wenn die Länge 44 Bytes überschreitet, verwenden Sie zum Speichern das Rohformat.
Es ist bekannt, dass die maximale Zuordnungseinheit des Speicherzuweisers 64 Bytes beträgt, RedisObject 16 Bytes belegt, die SDS-ID 3 Bytes belegt und eine Zeichenfolge, die mit NULL endet, ein Byte benötigt, also wenn das Zeichen Wenn die Zeichenfolgenlänge kleiner oder gleich 44 ist, muss der Speicher nur einmal zugewiesen werden. RedisObject und SDS befinden sich in derselben Speichereinheit. Wir nennen diese Datenstruktur Embstr, während diejenigen, die sich nicht in derselben Speichereinheit befinden, als Raw bezeichnet werden.
dict
dict (Codierung ist Hashtabellentyp, Wörterbuch) entsprechend der Hash-, Set- und Zset-Sammlung (wird zum Speichern der Zuordnung zwischen Wert und Punktzahl verwendet).
dict ähnelt der HashMap-Struktur von Java
, der Unterschied besteht darin, dass die HashMap-Erweiterung auf ein Array angewendet, dann durchlaufen, die alten Daten erneut gehasht und untergehängt werden soll Das Array als einzelner Thread Es ist für Redis schwierig, einem so zeitaufwändigen Prozess standzuhalten. Daher verwendet es zwei Arrays, kehrt zuerst zurück und verschiebt die Daten dann Stück für Stück, wenn sie frei sind Die Daten werden gelöscht. Wir nennen diesen Vorgang #🎜 🎜#gradualrehash
.
config set maxmemory-policy volatile-lfu # 修改内存淘汰策略
set name zhangsan
object freq name # 获取计数值,仅lfu模式下可用,初始化为5
get name
object freq name # 再次访问,返回为6
Nach dem Login kopieren
Das obige ist der detaillierte Inhalt vonWas ist das Prinzip der Redis-Datenstruktur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen 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