


Was sind die Prinzipien und die Verwendung der Redis-Typ- und Kodierungskodierung?
摘要
Redis是一款开源的高性能key-value数据库,广泛应用于各种场景。在Redis中,数据类型(type)和编码(encoding) 是非常重要的概念。本篇博客将详细介绍Redis支持的数据类型以及相应的编码方式和底层实现原理。
要查看Redis某个key的内部编码,可以使用Redis命令OBJECT ENCODING key
。其中,key
是你想要查询的键名。例如,如果你想要查询名为mykey
的键的内部编码,可以执行以下命令:
127.0.0.1:6379> object encoding mykey // 查看某个Redis键值的编码
redisObject
在 Redis 中,redisObject 是 Redis 中最基本的数据结构之一。redisObject 用于表示 Redis 中的键值对中的值,它可以是字符串、整数、列表、哈希表等任意一种 Redis 数据类型。
redisObject 的定义如下:
typedef struct redisObject { // 类型 unsigned type:4; // 编码方式 unsigned encoding:4; // 引用计数 int refcount; // 指向实际值的指针 void *ptr; } robj;
type:表示 redisObject 的类型。
encoding:表示 redisObject 的编码方式。
refcount:表示当前 redisObject 被引用的次数。
ptr: ptr字段则是一个指针,指向实际的 Redis 对象。
Redis源码encoding取值有如下几种:
#define OBJ_ENCODING_RAW 0 /* Raw representation */ #define OBJ_ENCODING_INT 1 /* Encoded as integer */ #define OBJ_ENCODING_HT 2 /* Encoded as hash table */ #define OBJ_ENCODING_ZIPMAP 3 /* Encoded as zipmap */ #define OBJ_ENCODING_LINKEDLIST 4 /* No longer used: old list encoding. */ #define OBJ_ENCODING_ZIPLIST 5 /* Encoded as ziplist */ #define OBJ_ENCODING_INTSET 6 /* Encoded as intset */ #define OBJ_ENCODING_SKIPLIST 7 /* Encoded as skiplist */ #define OBJ_ENCODING_EMBSTR 8 /* Embedded sds string encoding */ #define OBJ_ENCODING_QUICKLIST 9 /* Encoded as linked list of ziplists */
类型与编码介绍
Redis支持五种主要的数据类型:字符串(string)、列表(list)、集合(set)、有序集合(sorted set)和哈希(hash)。每种数据类型都有对应的编码方式。
数据类型与编码方式总览如下:
数据类型 | 编码方式 |
---|---|
字符串 | int、embstr、raw |
哈希表 | ziplist、hashtable |
列表 | ziplist、linkedlist、quicklist |
集合 | intset、hashtable |
有序集合 | ziplist、skiplist |
String
String ist der grundlegendste Datentyp in Redis und wird normalerweise zum Speichern von Text- oder Binärdaten verwendet. Redis unterstützt zwei Codierungsmethoden:
Wenn in Redis eine Zeichenfolge als Ganzzahl dargestellt werden kann, wird sie in eine Ganzzahl konvertiert und mithilfe der Int-Codierung gespeichert. Die Vorteile der Int-Codierung sind geringer Speicherplatz und hohe Betriebseffizienz. Der Nachteil besteht darin, dass nur Ganzzahlen gespeichert werden können und keine Zeichenfolgenoperationen unterstützt werden.
embstr (embstr-codierte Zeichenfolge): Speichern Sie Zeichenfolgen mit einer Länge von weniger als 44 Bytes. Wenn eine Zeichenfolge relativ kurz ist, kann die Verwendung dieser Codierungsmethode zum Speichern den Speicherverbrauch reduzieren.
raw (rohcodierte Zeichenfolge): Speichern Sie Zeichenfolgen mit einer Länge von mehr als 44 Bytes. Wenn eine Zeichenfolge relativ lang ist, wird diese Codierungsmethode zum Speichern verwendet.
Liste
Eine Liste ist eine geordnete Sammlung von Zeichenfolgen, in der Elemente hinzugefügt, geändert und gelöscht werden können. Redis unterstützt drei Codierungsmethoden:
ziplist: Vor der Redis3.2-Version, Wenn die Länge jeder Zeichenfolge in der Liste weniger als 64 Byte beträgt und die Anzahl der Elemente in der Liste weniger als 512 beträgt, , die Listenobjekt Verwenden Sie die Ziplist-Kodierung und in anderen Fällen die Linkedlist-Kodierung. ziplist ist eine kompakte, komprimierte Listenstruktur, die Speicherplatz spart. Gut für kleine Listen.
Linkedlist ist eine Art Datenstruktur, die Listen jeder Größe durch eine verknüpfte Listenstruktur unterstützt. Der Speicherbedarf nimmt jedoch mit zunehmender Länge der Liste zu.
Quicklist: Quicklist wurde in Redis Version 3.2 eingeführt und ist eine aus mehreren Ziplists bestehende Listenstruktur, die nicht nur die Leistung sicherstellen, sondern auch Speicher sparen kann. Geeignet für große Listen.
Sammlung
Eine Sammlung ist eine Reihe ungeordneter Zeichenfolgensammlungen, die das Hinzufügen, Löschen und Abfragen von Elementen unterstützen. Redis unterstützt zwei Codierungsmethoden:
intset: Wenn die Elemente in der Sammlung alle Ganzzahlen sind, verwendet Redis die Intset-Codierung zum Speichern von . Die Vorteile der Intset-Codierung sind geringer Speicherplatz und hohe Betriebseffizienz.
hashtable: Wenn die Elemente in der Sammlung Zeichenfolgen enthalten, speichert Redis sie in der Hashtable-Codierung . Der Vorteil der Hashtable-Codierung besteht darin, dass sie Elemente jeden Typs speichern kann und String-Operationen unterstützt. Der Nachteil besteht darin, dass der Speicherplatz relativ groß und die Betriebseffizienz relativ gering ist.
Geordneter Satz
Ungeordneter Sammlung von Zeichenfolgen wird eine Punktzahl zugewiesen, sodass sie entsprechend der Punktzahl sortiert werden können und einen geordneten Satz bilden. Redis unterstützt zwei Kodierungsmethoden:
ziplist: Speichern Sie mit der Ziplist-Kodierung weniger als 128 Elemente und alle Elementgrößen betragen weniger als 64 Byte. Ziplist ist eine kompakte, komprimierte Listenstruktur, die für kleine geordnete Sammlungen geeignet ist.
skiplist: Skiplist ist eine Skiplist-Struktur, die eine schnelle Abfrage und Sortierung unterstützt. Geeignet für große, geordnete Sammlungen.
Hash-Tabelle
Eine Hash-Tabelle ist eine Sammlung von Schlüssel-Wert-Paaren, wobei jedem Schlüssel ein Wert zugeordnet ist. Redis unterstützt zwei Codierungsmethoden:
ziplist: Die Zeichenfolgenlänge aller im Hash-Objekt gespeicherten Schlüsselwerte beträgt weniger als 64 Byte und die Anzahl der Schlüssel-Wert-Paare beträgt weniger als 512 , Redis speichert sie in Ziplist-Kodierung. Die Vorteile der Ziplist-Kodierungsmethode sind geringer Speicherplatz und hohe Betriebseffizienz. Der Nachteil besteht darin, dass schnelle Schlüsselsuchvorgänge nicht unterstützt werden.
Zusätzlich zu den oben genannten Bedingungen verwendet Redis die Hash-Tabellenkodierung zur Speicherung. Der Vorteil der Hashtable-Codierung besteht darin, dass sie schnelle Schlüsselsuchvorgänge unterstützt. Der Nachteil besteht darin, dass der Speicherplatz relativ groß und die Betriebseffizienz relativ gering ist.
Grundlegende Prinzipien von Typen und Codierung
Nachdem wir die von Redis unterstützten Datentypen und Codierungsmethoden verstanden haben, werfen wir einen Blick auf die zugrunde liegenden Implementierungsprinzipien.
Codierungskonvertierung
In Redis verfügt jedes Schlüssel-Wert-Paar über eine Typkennung, die zur Angabe des im Schlüssel-Wert-Paar gespeicherten Datentyps verwendet wird. Wenn wir einen Schlüssel bearbeiten, kodiert Redis das Schlüssel-Wert-Paar basierend auf der aktuellen Kodierung des Schlüssels und der für die Operation erforderlichen Kodierung.
Wenn wir beispielsweise Inhalte an einen String anhängen und die aktuelle Codierung des Strings unformatiert ist, der neue Inhalt jedoch mit der Embstr-Codierung gespeichert werden kann, konvertiert Redis die Codierung des Strings vom rohen forembstr.
Datenstruktur
Redis verwendet eine Vielzahl klassischer Datenstrukturen, um verschiedene Datentypen zu implementieren, und beschränkt sich nicht nur auf Codierungsmethoden. Beispielsweise werden Redis-Listen und Hash-Tabellen mithilfe verknüpfter Listenstrukturen implementiert. Skip List ist eine effiziente Datenstruktur, die in geordneten Sammlungen verwendet wird.
Diese Datenstrukturen wurden sorgfältig entworfen und optimiert, um den Anwendungsanforderungen in verschiedenen Szenarien gerecht zu werden. Beispielsweise eignet sich die verknüpfte Listenstruktur für Situationen, in denen Elemente häufig hinzugefügt und gelöscht werden müssen, während die Struktur der übersprungenen Liste besser für Sortier- und Suchvorgänge geeignet ist.
Das obige ist der detaillierte Inhalt vonWas sind die Prinzipien und die Verwendung der Redis-Typ- und Kodierungskodierung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Der Redis -Cluster -Modus bietet Redis -Instanzen durch Sharding, die Skalierbarkeit und Verfügbarkeit verbessert. Die Bauschritte sind wie folgt: Erstellen Sie ungerade Redis -Instanzen mit verschiedenen Ports; Erstellen Sie 3 Sentinel -Instanzen, Monitor -Redis -Instanzen und Failover; Konfigurieren von Sentinel -Konfigurationsdateien, Informationen zur Überwachung von Redis -Instanzinformationen und Failover -Einstellungen hinzufügen. Konfigurieren von Redis -Instanzkonfigurationsdateien, aktivieren Sie den Cluster -Modus und geben Sie den Cluster -Informationsdateipfad an. Erstellen Sie die Datei nodes.conf, die Informationen zu jeder Redis -Instanz enthält. Starten Sie den Cluster, führen Sie den Befehl erstellen aus, um einen Cluster zu erstellen und die Anzahl der Replikate anzugeben. Melden Sie sich im Cluster an, um den Befehl cluster info auszuführen, um den Clusterstatus zu überprüfen. machen

Redis verwendet Hash -Tabellen, um Daten zu speichern und unterstützt Datenstrukturen wie Zeichenfolgen, Listen, Hash -Tabellen, Sammlungen und geordnete Sammlungen. Ernähren sich weiterhin über Daten über Snapshots (RDB) und appendiert Mechanismen nur Schreibmechanismen. Redis verwendet die Master-Slave-Replikation, um die Datenverfügbarkeit zu verbessern. Redis verwendet eine Ereignisschleife mit einer Thread, um Verbindungen und Befehle zu verarbeiten, um die Datenatomizität und Konsistenz zu gewährleisten. Redis legt die Ablaufzeit für den Schlüssel fest und verwendet den faulen Löschmechanismus, um den Ablaufschlüssel zu löschen.

Schritte zur Lösung des Problems, das Redis-Server nicht finden kann: Überprüfen Sie die Installation, um sicherzustellen, dass Redis korrekt installiert ist. Setzen Sie die Umgebungsvariablen Redis_host und Redis_port; Starten Sie den Redis-Server Redis-Server; Überprüfen Sie, ob der Server Redis-Cli Ping ausführt.

Um alle Schlüssel in Redis anzuzeigen, gibt es drei Möglichkeiten: Verwenden Sie den Befehl keys, um alle Schlüssel zurückzugeben, die dem angegebenen Muster übereinstimmen. Verwenden Sie den Befehl scan, um über die Schlüssel zu iterieren und eine Reihe von Schlüssel zurückzugeben. Verwenden Sie den Befehl Info, um die Gesamtzahl der Schlüssel zu erhalten.

Um die Redis -Versionsnummer anzuzeigen, können Sie die folgenden drei Methoden verwenden: (1) Geben Sie den Info -Befehl ein, (2) Starten Sie den Server mit der Option --version und (3) die Konfigurationsdatei anzeigen.

Der beste Weg, um Redis -Quellcode zu verstehen, besteht darin, Schritt für Schritt zu gehen: Machen Sie sich mit den Grundlagen von Redis vertraut. Wählen Sie ein bestimmtes Modul oder eine bestimmte Funktion als Ausgangspunkt. Beginnen Sie mit dem Einstiegspunkt des Moduls oder der Funktion und sehen Sie sich die Codezeile nach Zeile an. Zeigen Sie den Code über die Funktionsaufrufkette an. Kennen Sie die von Redis verwendeten Datenstrukturen. Identifizieren Sie den von Redis verwendeten Algorithmus.

Die Verwendung der REDIS -Anweisung erfordert die folgenden Schritte: Öffnen Sie den Redis -Client. Geben Sie den Befehl ein (Verbschlüsselwert). Bietet die erforderlichen Parameter (variiert von der Anweisung bis zur Anweisung). Drücken Sie die Eingabetaste, um den Befehl auszuführen. Redis gibt eine Antwort zurück, die das Ergebnis der Operation anzeigt (normalerweise in Ordnung oder -err).

Redis bestellte Sets (ZSETs) werden verwendet, um bestellte Elemente und Sortieren nach zugehörigen Bewertungen zu speichern. Die Schritte zur Verwendung von ZSET umfassen: 1. Erstellen Sie ein Zset; 2. Fügen Sie ein Mitglied hinzu; 3.. Holen Sie sich eine Mitgliederbewertung; 4. Holen Sie sich eine Rangliste; 5. Holen Sie sich ein Mitglied in der Rangliste; 6. Ein Mitglied löschen; 7. Holen Sie sich die Anzahl der Elemente; 8. Holen Sie sich die Anzahl der Mitglieder im Score -Bereich.
