Inhaltsverzeichnis
set key value [EX seconds] [PX milliseconds] [NX|XX]
Nach dem Login kopieren
" >1. Grundlegende Verwendung
set key value [EX seconds] [PX milliseconds] [NX|XX]
Nach dem Login kopieren
4. Incr globale ID
三、支持存储的数据类型" > 3. Unterstützte gespeicherte Datentypen 分布式锁

3、incr 计数器

4、Incr 全局id

5、Incr 限流

6、bit 操作,位图功能,在线用户统计 0/1标记 

三、支持存储的数据类型

四、不同的编码类型
五、String存储原理
六、三种编码存储区别
七、int,embstr编码什么时候转换成raw
八、SDS数据结构的优点
九、为什么不用c中的字符数组?
🎜7. Wann werden Int- und Embstr-Kodierung in Raw konvertiert? 🎜

🎜8. Vorteile der SDS-Datenstruktur🎜🎜🎜1 Binary Safe kann drei Kodierungen für Bildformung, Gleitkomma 🎜🎜2 und speichern Zeichenfolge, die den Speicher voll ausnutzt und die Speicherauslastung verbessert🎜
  • int Speicher 8 Byte lang, Ganzzahl lang, 2^63-1
  • Embstr< /code> SDS einfacher dynamischer String im Embstr-Format. Der Speicherplatz ist kontinuierlich und schreibgeschützt, solange die Änderung durchgeführt wird , SDS, speichert Zeichenfolgen, die größer als 44 Bytes sind
🎜3. Machen Sie sich keine Sorgen über Speicherüberlauf, sds verfügt über eine automatische Erweiterungsfunktion🎜🎜4 Die Länge des Strings beträgt O(1) und das len-Attribut wird durch Speicherplatzzuweisung und Lazy Space Release gespeichert Speicherzuweisungen🎜🎜6 Bestimmen Sie, ob Sie mit dem len-Attribut fertig werden möchten, das Folgendes enthalten kann:

十、关于内存预分配特性" > 6. Unterschiede zwischen drei Arten von Codierungsspeichern 🎜🎜1. Embstrs RedisObject und SDS-Speicher sind in einem Stück, solange Da sie erstellt werden, Speicher einmal zuweisen, Speicher einmal freigeben, wenn sie zerstört werden, ist es leicht zu finden🎜🎜2. Raw ist RedisObject und SDS-Speicher befindet sich nicht am selben Ort Es muss erstellt werden, Speicher zweimal zuweisen< /code>, wenn es zerstört wird, Speicher zweimal freigeben🎜🎜3 Die Struktur von embstr bestimmt, dass RedisObject und SDS muss Speicher neu zuweisen. Daher können embstr-codierte Daten nicht geändert werden und sind schreibgeschützt. 🎜

🎜7. Wann werden Int- und Embstr-Kodierung in Raw konvertiert? 🎜

🎜8. Vorteile der SDS-Datenstruktur🎜🎜🎜1 Binary Safe kann drei Kodierungen für Bildformung, Gleitkomma 🎜🎜2 und speichern Zeichenfolge, die den Speicher voll ausnutzt und die Speicherauslastung verbessert🎜
  • int Speicher 8 Byte lang, Ganzzahl lang, 2^63-1
  • Embstr< /code> SDS einfacher dynamischer String im Embstr-Format. Der Speicherplatz ist kontinuierlich und schreibgeschützt, solange die Änderung durchgeführt wird , SDS, speichert Zeichenfolgen, die größer als 44 Bytes sind
🎜3. Machen Sie sich keine Sorgen über Speicherüberlauf, sds verfügt über eine automatische Erweiterungsfunktion🎜🎜4 Die Länge des Strings beträgt O(1)
und das len-Attribut wird durch Speicherplatzzuweisung und Lazy Space Release gespeichert Speicherzuweisungen🎜🎜6 Bestimmen Sie, ob Sie mit dem len-Attribut fertig werden möchten, das Folgendes enthalten kann:

十、关于内存预分配特性

十一、关于惰性空间释放
Heim Datenbank Redis Lernen von Redis-Datentypen: Lassen Sie uns über String-Prinzipien sprechen

Lernen von Redis-Datentypen: Lassen Sie uns über String-Prinzipien sprechen

Jan 29, 2022 am 08:00 AM
redis string Speicherprinzip 数据类型

Dieser Artikel wird Ihnen helfen, den String im Redis-Datentyp zu verstehen und über das Speicherprinzip des String-Datentyps zu sprechen.

Lernen von Redis-Datentypen: Lassen Sie uns über String-Prinzipien sprechen

Redis ist eine Middleware, die häufig in der Arbeit verwendet wird. Sie unterstützt umfangreiche Datenstrukturen, verfügt über eine extrem starke Lese- und Schreibleistung und kann 100.000+ TPS erreichen.

Der heutige Artikel analysiert und fasst den String-Typ zusammen, der auch eine der am häufigsten verwendeten Datenstrukturen ist. Dieser Artikel wird basierend auf redis5.0 analysiert. [Verwandte Empfehlungen: Redis-Video-Tutorial

1. Grundlegende Verwendung
set key value [EX seconds] [PX milliseconds] [NX|XX]
Nach dem Login kopieren

1. set ist der angegebene Name, value ist der Wert, der gespeichert werden muss

2 Ablaufzeit Sekunden, PX Geben Sie die Ablaufzeit in Millisekunden an

3. Die Einstellung ist nur erfolgreich, wenn der Schlüssel nicht vorhanden ist. Zusammenfassung: 5.0 unterstützt den Set-Befehl Geben Sie die Ablaufzeit und die Nichtexistenz an, das heißt, die verteilte Sperrfunktion kann über einen Befehl realisiert werden. In früheren Versionen müssen das Festlegen des Schlüssels und das Festlegen der Ablaufzeit in zwei Befehle unterteilt werden es schwieriger, die Atomizität sicherzustellen.

2. Nutzungsszenarien

2. Setnx Distributed lock

4. Incr globale ID

5 code>Incr current limit

6. Bitoperation, Bitmap-Funktion, Online-Benutzerstatistik 0/1 Markierung

3. Unterstützte gespeicherte Datentypen 分布式锁

3、incr 计数器

4、Incr 全局id

5、Incr 限流

6、bit 操作,位图功能,在线用户统计 0/1标记

三、支持存储的数据类型

整型,字符型,float(单浮点型)

四、不同的编码类型

Lernen von Redis-Datentypen: Lassen Sie uns über String-Prinzipien sprechen

Lernen von Redis-Datentypen: Lassen Sie uns über String-Prinzipien sprechen

五、String存储原理

在Redis中,数据存储在一个RedisObject类中

typedef struct redisObject {    
//这个类型可以是string,也可以是hash,zset等等
unsigned type:4;    
unsigned encoding:4;    
//记录lru,lfu淘汰算法依赖的访问时间和访问频率    
unsigned lru:LRU_BITS; 
/* LRU time (relative to global lru_clock) or                            * LFU data (least significant 8 bits frequency                            * and most significant 16 bits access time). */
//引用计数器    
int refcount;    
//指向真实数据结构对象    
void *ptr;
} robj;
Nach dem Login kopieren

对于String,Redis自定义了一种简单动态字符串的数据结构来存储字符串数。

源码实现:多种数据结构,分别表示可以存储不同长度的字符串。

Lernen von Redis-Datentypen: Lassen Sie uns über String-Prinzipien sprechen

len:代表已经使用的长度

alloc:分配的总内存大小

flags:代表存储类型

buf[]:实际的数据

六、三种编码存储区别

1、embstr的RedisObject,SDS内存在一块,只要创建时分配一次内存,销毁时释放一次内存,查找方便

2、raw则RedisObject,SDS内存不在一块,需要创建时分配两次内存,销毁时释放两次内存

3、embstr的结构,决定了他需要增加长度时,RedisObject,SDS都需要重新分配内存。因此embstr编码的数据是不能修改的,只读的

七、int,embstr编码什么时候转换成raw

1、int类型的数据不再是int类型,转成raw

2、长度大于2^63-1转成embstr

3、embstr字符超过44字节,转成raw

八、SDS数据结构的优点

1、二进制安全的 可以存储图片 整形,浮点型

2、String 的三种编码,充分利用内存,提高内存利用率

  • int 存储8个字节长整形 long ,2^63-1
  • Embstr embstr格式的SDS simple Dynamic String 内存空间是连续的,只读的,只要执行修改就会转成raw
  • Raw,SDS,存储大于44个字节的字符串

3、不用担心内存溢出,sds具备自动扩容能力

4、获取字符串长度时间复杂度O(1),存储了len属性

5、通过空间预分配惰性空间释放防止多次分配内存

6、判断是否结束使用len属性,可以包含'',操作字符串。

九、为什么不用c中的字符数组?

1、需要预先分配内存,可能内存溢出

2、获取长度需要遍历数组,时间复杂度O(n)

3、字符数组长度变化,需要内存重分配

4、c的字符数组中,''代表判断结束。二进制数据存储不安全

Integer-Typ, Zeichentyp, Float (einzelner Gleitkommatyp) 🎜

🎜Vier verschiedene Codierungstypen🎜🎜🎜Lernen von Redis-Datentypen: Lassen Sie uns über String-Prinzipien sprechen🎜🎜 Lernen von Redis-Datentypen: Lassen Sie uns über String-Prinzipien sprechen🎜

🎜5. String-Speicherprinzip🎜🎜🎜In Redis werden Daten in einer RedisObject-Klasse gespeichert🎜
//仅仅设置长度,没有真正清除数据
void sdsclear(sds s) {    
//单纯设置长度为0    
sdssetlen(s, 0);    
//第一个字符设置为结束符    
s[0] = &#39;<pre class="brush:php;toolbar:false">sds sdsRemoveFreeSpace(sds s) 
{
struct sdshdr *sh;    
sh = (void*) (s-(sizeof(struct sdshdr)));    
// 进行内存重分配,让 buf 的长度仅仅足够保存字符串内容 
sh = zrealloc(sh, sizeof(struct sdshdr)+sh->len+1);    
// 空余空间为 0    
sh->free = 0;    
return sh->buf;
}
Nach dem Login kopieren
'; }🎜Für String passt Redis eine einfache dynamische String-Datenstruktur an, um die Anzahl der Strings zu speichern. 🎜🎜Quellcode-Implementierung: Mehrere Datenstrukturen, die jeweils Zeichenfolgen unterschiedlicher Länge darstellen, die gespeichert werden können. 🎜🎜Lernen von Redis-Datentypen: Lassen Sie uns über String-Prinzipien sprechen🎜🎜< img src alt="" title="Zum Verschieben anklicken und ziehen" Load="lazy"/>len: stellt die verwendete Länge dar🎜🎜alloc: die insgesamt zugewiesene Speichergröße🎜🎜 Flags: stellt den Speichertyp dar 🎜🎜buf[]: tatsächliche Daten 🎜

6. Unterschiede zwischen drei Arten von Codierungsspeichern 🎜🎜1. Embstrs RedisObject und SDS-Speicher sind in einem Stück, solange Da sie erstellt werden, Speicher einmal zuweisen, Speicher einmal freigeben, wenn sie zerstört werden, ist es leicht zu finden🎜🎜2. Raw ist RedisObject und SDS-Speicher befindet sich nicht am selben Ort Es muss erstellt werden, Speicher zweimal zuweisen< /code>, wenn es zerstört wird, <code>Speicher zweimal freigeben🎜🎜3 Die Struktur von embstr bestimmt, dass RedisObject und SDS muss Speicher neu zuweisen. Daher können embstr-codierte Daten nicht geändert werden und sind schreibgeschützt. 🎜

🎜7. Wann werden Int- und Embstr-Kodierung in Raw konvertiert? 🎜

🎜8. Vorteile der SDS-Datenstruktur🎜🎜🎜1 Binary Safe kann drei Kodierungen für Bildformung, Gleitkomma 🎜🎜2 und speichern Zeichenfolge, die den Speicher voll ausnutzt und die Speicherauslastung verbessert🎜
  • int Speicher 8 Byte lang, Ganzzahl lang, 2^63-1
  • Embstr< /code> SDS einfacher dynamischer String im Embstr-Format. Der Speicherplatz ist kontinuierlich und schreibgeschützt, solange die Änderung durchgeführt wird , SDS, speichert Zeichenfolgen, die größer als 44 Bytes sind</li></ul>🎜3. Machen Sie sich keine Sorgen über Speicherüberlauf, sds verfügt über eine automatische Erweiterungsfunktion🎜🎜4 Die Länge des Strings beträgt O(1) und das len-Attribut wird durch Speicherplatzzuweisung und Lazy Space Release gespeichert Speicherzuweisungen🎜🎜6 Bestimmen Sie, ob Sie mit dem len-Attribut fertig werden möchten, das Folgendes enthalten kann:

    十、关于内存预分配特性

    Lernen von Redis-Datentypen: Lassen Sie uns über String-Prinzipien sprechen

    通过源码分析,扩容策略是字符串在长度小于 SDS_MAX_PREALLOC 之前,扩容空间采用加倍策略,也就是保留 100% 的冗余空间。当长度超过 SDS_MAX_PREALLOC 之后,为了避免加倍后的冗余空间过大而导致浪费,每次扩容只会多分配 SDS_MAX_PREALLOC大小的冗余空间。

    十一、关于惰性空间释放

    惰性空间释放用于优化 SDS 的字符串缩短操作:当 SDS 的 API 需要缩短 SDS 保存的字符串时, 程序并不立即使用内存重分配来回收缩短后多出来的字节, 而是使用 free 属性将这些字节的数量记录起来,并等待将来使用。

    //仅仅设置长度,没有真正清除数据
    void sdsclear(sds s) {    
    //单纯设置长度为0    
    sdssetlen(s, 0);    
    //第一个字符设置为结束符    
    s[0] = &#39;\0&#39;;
    }
    Nach dem Login kopieren

    真正的清除空间

    sds sdsRemoveFreeSpace(sds s) 
    {
    struct sdshdr *sh;    
    sh = (void*) (s-(sizeof(struct sdshdr)));    
    // 进行内存重分配,让 buf 的长度仅仅足够保存字符串内容 
    sh = zrealloc(sh, sizeof(struct sdshdr)+sh->len+1);    
    // 空余空间为 0    
    sh->free = 0;    
    return sh->buf;
    }
    Nach dem Login kopieren

以上便是关于string的知识点记录,string的设计很多地方都非常巧妙,比如不同的结构体存储不同长度的字符串,不同编码类型存储不同长度的字符串,

空间预分配,空间惰性释放等,从存储结构,编码类型,内存分配策略和回收策略,作者都从性能方面做了非常多的考量设计,可想而知这也是redis为什么性能极高的原因,工作中也要学习这种追求极致性能的优良风格和设计风格。

更多编程相关知识,请访问:编程入门!!

Das obige ist der detaillierte Inhalt vonLernen von Redis-Datentypen: Lassen Sie uns über String-Prinzipien sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So erstellen Sie den Redis -Clustermodus So erstellen Sie den Redis -Clustermodus Apr 10, 2025 pm 10:15 PM

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

So implementieren Sie die zugrunde liegenden Redis So implementieren Sie die zugrunde liegenden Redis Apr 10, 2025 pm 07:21 PM

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.

So sehen Sie alle Schlüssel in Redis So sehen Sie alle Schlüssel in Redis Apr 10, 2025 pm 07:15 PM

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.

Was tun, wenn Redis-Server nicht gefunden werden kann Was tun, wenn Redis-Server nicht gefunden werden kann Apr 10, 2025 pm 06:54 PM

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.

So verwenden Sie Redis Zset So verwenden Sie Redis Zset Apr 10, 2025 pm 07:27 PM

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.

So sehen Sie die Versionsnummer der Redis So sehen Sie die Versionsnummer der Redis Apr 10, 2025 pm 05:57 PM

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.

So verwenden Sie den Redisschalter So verwenden Sie den Redisschalter Apr 10, 2025 pm 07:00 PM

REDIS -Zähler bieten Datenstrukturen für das Speichern und Betriebszähler an. Zu den spezifischen Schritten gehören: Erstellen eines Zählers: Verwenden Sie den Befehl Inc Inc, um dem vorhandenen Schlüssel 1 hinzuzufügen. Holen Sie sich den Zählerwert: Verwenden Sie den Befehl GET, um den aktuellen Wert zu erhalten. Increment -Zähler: Verwenden Sie den Befehl Incby, gefolgt von der zu erhöhten Menge. Decrement -Zähler: Verwenden Sie den Befehl Decr oder Decrby, um um 1 zu verringern, oder geben Sie die Menge an. Setzen Sie den Zähler zurück: Verwenden Sie den Befehl SET, um seinen Wert auf 0 festzulegen. Darüber hinaus können Zähler verwendet werden, um die Tarife, die Sitzungsverfolgung und das Erstellen von Abstimmungssystemen zu begrenzen.

Wie ist der Schlüssel für die Redis -Abfrage eindeutig Wie ist der Schlüssel für die Redis -Abfrage eindeutig Apr 10, 2025 pm 07:03 PM

Redis verwendet fünf Strategien, um die Einzigartigkeit von Schlüssel zu gewährleisten: 1. Namespace -Trennung; 2. Hash -Datenstruktur; 3.. Datenstruktur festlegen; 4. Sonderzeichen von Stringschlüssel; 5. Lua -Skriptüberprüfung. Die Auswahl spezifischer Strategien hängt von Datenorganisationen, Leistung und Skalierbarkeit ab.

See all articles