当前位置: 首页 > news >正文

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结构图

http://www.dtcms.com/a/98972.html

相关文章:

  • 未来村庄智慧灯杆:点亮乡村智慧生活​
  • Python列表(三)
  • 【Linux】B站黑马程序视频学习笔记(一)
  • Python 的未来:在多元变革中持续领跑
  • 第一天 Linux驱动程序简介
  • 考研408第七章:查找总结
  • 如何将 Java 应用做成 EXE 的可执行软件
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例9,TableView16_09 嵌套表格拖拽排序
  • Redis 实现分布式锁详解
  • torch不能使用cuda的解决方案
  • c++位运算总结
  • 使用Process子类创建进程
  • C++编程学习笔记:函数相关特性、引用与编译流程
  • TraeAI结合Proteus实现AI编程并仿真一个复杂工业物联网控制系统的开发(视频)
  • 力扣刷题494. 目标和
  • 【超详细教程】2025年3月最新Pytorch安装教程(同时讲解安装CPU和GPU版本)
  • Python3...(中国工信出版)读书笔记(1)python语言基础补充
  • 地下管线三维建模软件工具MagicPipe3D V3.6.1
  • Vue2 使用 v-if、v-else、v-else-if、v-show 以及 v-has 自定义指令实现条件渲染
  • [C++面试] 智能指针面试点(重点)续1
  • 飞书电子表格自建应用
  • JAVA反序列化深入学习(九):CommonsCollections7与CC链总结
  • 直接快速安装pytorch的cpu版本,在我的的 Python 3.8 + 虚拟环境 gdn 中安装
  • QT操作Word文档
  • The Rust Programming Language 学习 (七)
  • Windows 11系统下Kafka的详细安装与启动指南(JDK 1.8)
  • IvorySQL:兼容Oracle数据库的开源PostgreSQL
  • 【HTML 基础教程】HTML 链接
  • 多线程 - 线程安全引入
  • 什么是 实例化