Redis 源码硬核解析系列专题 - 第三篇:核心数据结构之字典(Dict)

1. 引言

字典(Dict)是Redis的核心数据结构之一,用于实现键值存储(Redis数据库的核心)和内部元数据管理(如客户端状态)。Redis的字典基于哈希表实现,支持高效的增删改查操作。本篇将深入剖析其源码实现,包括哈希表结构、冲突解决和渐进式rehash机制。


2. 字典的结构体定义

字典的定义在src/dict.hsrc/dict.c中。以下是核心结构:

代码片段dict.h):

typedef struct dictEntry {
   
    void *key;               // 键
    union {
   
        void *val;           // 值
        uint64_t u64;
        int64_t s64;
        double d;
    } v;
    struct dictEntry *next;  // 链表,解决哈希冲突
} dictEntry;

typedef struct dictht {
   
    dictEntry **table;       // 哈希表数组
    unsigned long size;      // 哈希表大小
    unsigned long sizemask;  // 大小掩码,用于计算索引
    unsigned long used;      // 已使用槽数
} dictht;

typedef struct dict {
   
    dictType *type;          // 类型特定函数(如自定义哈希)
    void *privdata;          // 私有数据
    dictht ht[2];            // 两个哈希表,用于rehash
    long rehashidx;          // rehash进度,-1表示未进行
} dict;

硬核解析

  • dictEntry:键值对节点,next指针形成链表解决冲突。
  • dictht:哈希表,size是2的幂次,sizemask = size - 1
  • dict:包含两个哈希表ht[0]ht[1],支持渐进式rehash。

Mermaid结构图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无名架构师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值