Le serveur Redis dispose de 16 bases de données par défaut, et une base de données correspond à une structure de données RedisDB.
typedef struct redisDb { dict *dict; dict *expires; dict * blocking_keys; dict * ready_keys; dict * watched_keys; ...... }
dict : table de hachage de l'espace clé, utilisée pour stocker toutes les paires clé-valeur
expire : expires Table de hachage Time, stockant le délai d'expiration des clés
blocking_keys : clés en état de blocage et client correspondant
string, List, hash, set , zset, stream, etc. sont représentés par des énumérations | encoding | |
---|---|---|
int, embstr, raw, hashtable, quicklist, ziplist, intset, skiplist, etc., représentés par l'énumération | lru | |
Quand c'est LRU, il indique le dernier temps d'accès ; quand c'est LFU, les 16 bits forts sont utilisés pour indiquer le temps d'accès au niveau minute, et les 8 bits bas sont utilisés pour indiquer la fréquence d'accès. Fréquence L'augmentation utilise un algorithme probabiliste. Plus la base est grande, plus il est difficile d'augmenter lorsque le temps d'accès est mis à jour, il y a une certaine probabilité que la fréquence d'accès soit atténuée. (Commun aux deux) L'heure d'accès est un modulo d'un nombre, et l'heure actuelle est également modulo. Si l'heure actuelle est supérieure à l'heure d'accès, c'est la différence entre les deux nombres si l'heure actuelle est inférieure à l'heure actuelle. temps d'accès, c'est l'heure actuelle plus le module et le temps d'accès. 🎜🎜#La valeur initiale est 1, ce qui a peu de signification de référence dans les applications pratiques# 🎜🎜# | ptr | Pointeur, occupe 8 octets, pointant vers l'adresse des données |
La commande est l’opération associée sur RedisObject. | ||
object Idletime Key # Renvoie le temps d'inactivité de la clé, qui est une description approximative du temps écoulé depuis la dernière fois que la clé a été lue et écrit Il n'est pas disponible en mode lfu#🎜 🎜# | int | Lorsque la valeur de la chaîne est un entier et est inférieure ou égale à la valeur maximale de long, l'encodage est int type, et ptr pointe directement vers l'adresse de type int |
La chaîne de Redis s'appelle SDS (Simple Dynamic String, simple string), correspondant au clé, valeur de chaîne non entière | Comme vous pouvez le voir, # 🎜🎜#SDS est similaire à la structure ArrayList de Java | Il alloue également une longueur initiale et l'étend lorsque la longueur dépasse. .Redis stipule que la longueur de la chaîne ne peut pas dépasser 512M. |
On sait que l'unité d'allocation maximale de l'allocateur de mémoire est de 64 octets, RedisObject occupe 16 octets, l'identifiant SDS occupe 3 octets et une chaîne se terminant par NULL nécessite un octet, donc lorsque le caractère Lorsque la longueur de la chaîne est inférieure ou égale à 44, la mémoire ne doit être allouée qu'une seule fois. RedisObject et SDS sont dans la même unité de mémoire. Nous appelons cette structure de données embstr, tandis que celles qui ne sont pas dans la même unité de mémoire sont appelées raw. object
.
trpedef struct SDS { int8 capacity; // 数组容量 int8 len; // 实际长度 int8 flags; byte[] content; // 数组内容 }
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!