Table des matières
1. Utilisation de base
1. Cache de données Hotspot, session distribuée2. Setnx Verrouillage distribué
三、支持存储的数据类型
四、不同的编码类型
五、String存储原理
六、三种编码存储区别
七、int,embstr编码什么时候转换成raw
八、SDS数据结构的优点
九、为什么不用c中的字符数组?
🎜7. Quand les codages int et embstr seront-ils convertis en brut ^63-1 Convertir en embstr🎜🎜3. Si le caractère embstr dépasse 44 octets, convertissez-le en brut ? 🎜

🎜8. Avantages de la structure de données SDS🎜🎜🎜1 Binary Safe peut stocker trois encodages de mise en forme d'image, virgule flottante 🎜🎜2 et Chaîne, exploitant pleinement la mémoire et améliorant l'utilisation de la mémoire🎜
  • int Stockage 8 octets de long, entier de 2^63-1
  • Embstr< /code> Chaîne dynamique simple SDS au format embstr. L'espace mémoire est continu et en lecture seule. Il sera converti tant que la modification est effectuée en brut. , SDS, stocke les chaînes de plus de 44 octets
🎜3 Ne vous inquiétez pas du débordement de mémoire, sds a une capacité d'expansion automatique🎜🎜4. d'obtention de la longueur de la chaîne est O(1), et l'attribut len ​​est stocké🎜🎜5. Grâce à la pré-allocation d'espace et à la Libération d'espace paresseuse Empêche plusieurs. allocations de mémoire🎜🎜6. Déterminez s'il faut finir d'utiliser l'attribut len, qui peut inclure '

十、关于内存预分配特性" > 6. Les différences entre trois types de stockage d'encodage 🎜🎜1, la mémoire RedisObject et SDS d'embstr sont d'un seul tenant, tant que au fur et à mesure qu'ils sont créés, Allouez la mémoire une fois, libérez la mémoire une fois lorsqu'ils sont détruits, faciles à trouver🎜🎜2 Raw est RedisObject et la mémoire SDS n'est pas au même endroit. il doit être créé, allouer de la mémoire deux fois< /code>, une fois détruit, libère de la mémoire deux fois🎜🎜3 La structure d'embstr détermine que lorsqu'il doit augmenter sa longueur, RedisObject et SDS doit réallouer de la mémoire. Par conséquent, les données codées en embstr ne peuvent pas être modifiées et sont en lecture seule. 🎜

🎜7. Quand les codages int et embstr seront-ils convertis en brut ^63-1 Convertir en embstr🎜🎜3. Si le caractère embstr dépasse 44 octets, convertissez-le en brut ? 🎜

🎜8. Avantages de la structure de données SDS🎜🎜🎜1 Binary Safe peut stocker trois encodages de mise en forme d'image, virgule flottante 🎜🎜2 et Chaîne, exploitant pleinement la mémoire et améliorant l'utilisation de la mémoire🎜
  • int Stockage 8 octets de long, entier de 2^63-1
  • Embstr< /code> Chaîne dynamique simple SDS au format embstr. L'espace mémoire est continu et en lecture seule. Il sera converti tant que la modification est effectuée en brut. , SDS, stocke les chaînes de plus de 44 octets
🎜3 Ne vous inquiétez pas du débordement de mémoire, sds a une capacité d'expansion automatique🎜🎜4. d'obtention de la longueur de la chaîne est O(1), et l'attribut len ​​est stocké🎜🎜5. Grâce à la pré-allocation d'espace et à la Libération d'espace paresseuse Empêche plusieurs. allocations de mémoire🎜🎜6. Déterminez s'il faut finir d'utiliser l'attribut len, qui peut inclure '

十、关于内存预分配特性

十一、关于惰性空间释放
Maison base de données Redis Apprentissage des types de données Redis : parlons des principes des chaînes

Apprentissage des types de données Redis : parlons des principes des chaînes

Jan 29, 2022 am 08:00 AM
redis string Principe de stockage 数据类型

Cet article vous amènera à comprendre le type de données String dans Redis et à parler du principe de stockage du type de données String. J'espère qu'il sera utile à tout le monde !

Apprentissage des types de données Redis : parlons des principes des chaînes

Redis est un middleware fréquemment utilisé dans le travail. Il prend en charge des structures de données riches, a des performances de lecture et d'écriture extrêmement élevées et les tps peuvent atteindre plus de 100 000.

L'article d'aujourd'hui analyse et résume le type String, qui est également l'une des structures de données les plus utilisées. Cet article est analysé sur la base de redis5.0. [Recommandations associées : Tutoriel vidéo Redis]

1. Utilisation de base

set key value [EX seconds] [PX milliseconds] [NX|XX]
Copier après la connexion

1 est la syntaxe, la clé est le nom spécifié, la valeur est la valeur qui doit être stockée

2. secondes d'expiration, PX Spécifiez le délai d'expiration en millisecondes

3. NX : le réglage est réussi uniquement lorsque la clé n'existe pas. 4. XX : le réglage est réussi uniquement lorsque la clé existe. Résumé : 5.0 prend en charge la commande set. spécifiez le délai d'expiration et l'inexistence. Le réglage est réussi, c'est-à-dire que la fonction de verrouillage distribué peut être réalisée via une seule commande. Dans les versions précédentes, le réglage de la clé et le réglage du délai d'expiration doivent être divisés en deux commandes. il est plus difficile d'assurer l'atomicité.

2. Scénarios d'utilisation

1. Cache de données Hotspot, session distribuée2. Setnx Verrouillage distribué

3. code>Incr limite de courant

6. Opération bit, fonction bitmap, statistiques utilisateur en ligne 0/1 mark 分布式锁

3、incr 计数器

4、Incr 全局id

5、Incr 限流

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

三、支持存储的数据类型

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

四、不同的编码类型

Apprentissage des types de données Redis : parlons des principes des chaînes

Apprentissage des types de données Redis : parlons des principes des chaînes

五、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;
Copier après la connexion

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

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

Apprentissage des types de données Redis : parlons des principes des chaînes

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的字符数组中,''代表判断结束。二进制数据存储不安全

3. Types de données stockées pris en charge

🎜Type entier, type de caractère, float (type à virgule flottante unique) 🎜

🎜Quatre types d'encodage différents🎜🎜🎜Apprentissage des types de données Redis : parlons des principes des chaînes🎜🎜 Apprentissage des types de données Redis : parlons des principes des chaînes🎜

🎜5. Principe de stockage des chaînes🎜🎜🎜Dans Redis, les données sont stockées dans une classe RedisObject🎜
//仅仅设置长度,没有真正清除数据
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;
}
Copier après la connexion
'; }🎜Pour String, Redis personnalise une structure de données de chaîne dynamique simple pour stocker le nombre de caractères de chaînes. 🎜🎜Implémentation du code source : plusieurs structures de données, chacune représentant des chaînes de différentes longueurs pouvant être stockées. 🎜🎜Apprentissage des types de données Redis : parlons des principes des chaînes🎜🎜< img src alt="" title="Cliquez et faites glisser pour déplacer" chargement="lazy"/>len : représente la longueur utilisée🎜🎜alloc : la taille totale de la mémoire allouée🎜🎜 flags : représente le type de stockage 🎜🎜buf[] : données réelles 🎜

6. Les différences entre trois types de stockage d'encodage 🎜🎜1, la mémoire RedisObject et SDS d'embstr sont d'un seul tenant, tant que au fur et à mesure qu'ils sont créés, Allouez la mémoire une fois, libérez la mémoire une fois lorsqu'ils sont détruits, faciles à trouver🎜🎜2 Raw est RedisObject et la mémoire SDS n'est pas au même endroit. il doit être créé, allouer de la mémoire deux fois< /code>, une fois détruit, <code>libère de la mémoire deux fois🎜🎜3 La structure d'embstr détermine que lorsqu'il doit augmenter sa longueur, RedisObject et SDS doit réallouer de la mémoire. Par conséquent, les données codées en embstr ne peuvent pas être modifiées et sont en lecture seule. 🎜

🎜7. Quand les codages int et embstr seront-ils convertis en brut ^63-1 Convertir en embstr🎜🎜3. Si le caractère embstr dépasse 44 octets, convertissez-le en brut ? 🎜

🎜8. Avantages de la structure de données SDS🎜🎜🎜1 Binary Safe peut stocker trois encodages de mise en forme d'image, virgule flottante 🎜🎜2 et Chaîne, exploitant pleinement la mémoire et améliorant l'utilisation de la mémoire🎜
  • int Stockage 8 octets de long, entier de 2^63-1
  • Embstr< /code> Chaîne dynamique simple SDS au format embstr. L'espace mémoire est continu et en lecture seule. Il sera converti tant que la modification est effectuée en brut. , SDS, stocke les chaînes de plus de 44 octets</li></ul>🎜3 <code>Ne vous inquiétez pas du débordement de mémoire, sds a une capacité d'expansion automatique🎜🎜4. d'obtention de la longueur de la chaîne est O(1), et l'attribut len ​​est stocké🎜🎜5. Grâce à la pré-allocation d'espace et à la Libération d'espace paresseuse Empêche plusieurs. allocations de mémoire🎜🎜6. Déterminez s'il faut finir d'utiliser l'attribut len, qui peut inclure '

    十、关于内存预分配特性

    Apprentissage des types de données Redis : parlons des principes des chaînes

    通过源码分析,扩容策略是字符串在长度小于 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;;
    }
    Copier après la connexion

    真正的清除空间

    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;
    }
    Copier après la connexion

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

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

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

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment construire le mode Cluster Redis Comment construire le mode Cluster Redis Apr 10, 2025 pm 10:15 PM

Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

Comment implémenter le redis sous-jacent Comment implémenter le redis sous-jacent Apr 10, 2025 pm 07:21 PM

Redis utilise des tables de hachage pour stocker les données et prend en charge les structures de données telles que les chaînes, les listes, les tables de hachage, les collections et les collections ordonnées. Redis persiste les données via des instantanés (RDB) et ajoutez les mécanismes d'écriture uniquement (AOF). Redis utilise la réplication maître-esclave pour améliorer la disponibilité des données. Redis utilise une boucle d'événement unique pour gérer les connexions et les commandes pour assurer l'atomicité et la cohérence des données. Redis définit le temps d'expiration de la clé et utilise le mécanisme de suppression paresseux pour supprimer la clé d'expiration.

Que faire si redis-server ne peut être trouvé Que faire si redis-server ne peut être trouvé Apr 10, 2025 pm 06:54 PM

Étapes pour résoudre le problème que Redis-Server ne peut pas trouver: Vérifiez l'installation pour vous assurer que Redis est installé correctement; Définissez les variables d'environnement redis_host et redis_port; Démarrer le serveur Redis Redis-Server; Vérifiez si le serveur exécute Redis-Cli Ping.

Comment le cluster redis est-il implémenté Comment le cluster redis est-il implémenté Apr 10, 2025 pm 05:27 PM

Le cluster Redis est un modèle de déploiement distribué qui permet une expansion horizontale des instances Redis, et est implémentée via la communication inter-nœuds, l'espace clé de la division des emplacements de hachage, l'élection du nœud, la réplication maître-esclave et la redirection de commande: communication inter-nœuds: la communication du réseau virtuel est réalisée via le bus de cluster. Slot de hachage: divise l'espace clé en emplacements de hachage pour déterminer le nœud responsable de la clé. Élection du nœud: au moins trois nœuds maîtres sont nécessaires et un seul nœud maître actif est assuré par le mécanisme électoral. Réplication maître-esclave: le nœud maître est responsable de la rédaction de demandes, et le nœud esclave est responsable des demandes de lecture et de la réplication des données. Redirection de commande: le client se connecte au nœud responsable de la clé et le nœud redirige les demandes incorrectes. Dépannage: détection des défauts, marquer la ligne et re

Comment afficher toutes les clés dans Redis Comment afficher toutes les clés dans Redis Apr 10, 2025 pm 07:15 PM

Pour afficher toutes les touches dans Redis, il existe trois façons: utilisez la commande Keys pour retourner toutes les clés qui correspondent au modèle spécifié; Utilisez la commande SCAN pour itérer les touches et renvoyez un ensemble de clés; Utilisez la commande info pour obtenir le nombre total de clés.

Comment utiliser redis zset Comment utiliser redis zset Apr 10, 2025 pm 07:27 PM

Les ensembles commandés par Redis (ZSETS) sont utilisés pour stocker des éléments commandés et trier par des scores associés. Les étapes à utiliser ZSET incluent: 1. Créer un ZSET; 2. Ajouter un membre; 3. Obtenez un score de membre; 4. Obtenez un classement; 5. Obtenez un membre dans la gamme de classement; 6. Supprimer un membre; 7. Obtenez le nombre d'éléments; 8. Obtenez le nombre de membres dans la plage de score.

Comment afficher le numéro de version de redis Comment afficher le numéro de version de redis Apr 10, 2025 pm 05:57 PM

Pour afficher le numéro de version redis, vous pouvez utiliser les trois méthodes suivantes: (1) Entrez la commande Info, (2) Démarrez le serveur avec l'option - Version et (3) afficher le fichier de configuration.

Comment la clé est-elle unique pour Redis Query Comment la clé est-elle unique pour Redis Query Apr 10, 2025 pm 07:03 PM

Redis utilise cinq stratégies pour assurer le caractère unique des clés: 1. Séparation des espaces de noms; 2. Structure de données de hachage; 3. Définir la structure des données; 4. Caractères spéciaux des touches de chaîne; 5. Vérification du script LUA. Le choix de stratégies spécifiques dépend de l'organisation des données, des performances et des exigences d'évolutivité.

See all articles