目 录 Contents 序 前言 第1章 Redis必会知识1 1.1 Redis 6.0的新特性2 1.2 Redis源码结构2 1.3 Redis的安装与调试3 1.4 小结6 第2章 基础数据结构解析7 2.1 对象7 2.2 字符串11 2.3 列表15 2.3.1 list15 2.3.2 ziplist16 2.3.3 quicklist18 2.4 字典25 2.4.1 基本实现25 2.4.2 字典扩容28 2.5 集合30 2.5.1 intset简介31 2.5.2 数据存储31 2.6 有序集合33 2.6.1 跳跃表简介33 2.6.2 数据存储36 2.7 小结37 第3章 stream底层数据结构38 3.1 stream简介38 3.1.1 listpack39 3.1.2 rax41 3.1.3 stream结构44 3.2 stream底层结构listpack 与rax的实现49 3.2.1 初始化49 3.2.2 查找元素49 3.2.3 添加元素51 3.2.4 删除元素53 3.2.5 遍历元素55 3.3 stream结构的实现55 3.3.1 初始化55 3.3.2 添加元素56 3.3.3 删除元素57 3.3.4 查找元素60 3.3.5 遍历元素61 3.4 小结63 第4章 Redis启动流程64 4.1 redisServer简介64 4.2 sever启动过程65 4.2.1 server初始化65 4.2.2 启动监听68 4.3 事件处理71 4.3.1 ��件事件72 4.3.2 时间事件77 4.4 小结80 第5章 一次命令请求过程81 5.1 基础知识81 5.1.1 客户端结构体client81 5.1.2 命令结构体redisCommand83 5.2 I/O多线程86 5.2.1 I/O线程管理87 5.2.2 I/O线程同步89 5.3 RESP 3协议92 5.4 命令解析96 5.5 命令调用98 5.6 ACL权限控制100 5.6.1 ACL概述100 5.6.2 ACL源码实现104 5.7 结果返回105 5.8 小结108 第6章 持久化109 6.1 备份原理109 6.1.1 内存数据**落盘110 6.1.2 异步复制112 6.1.3 文本协议与二进制协议113 6.1.4 大小端114 6.2 持久化配置115 6.3 AOF116 6.3.1 同步时机116 6.3.2 always策略**性116 6.3.3 命令同步118 6.3.4 重写机制119 6.4 RDB119 6.4.1 执行流程119 6.4.2 RDB协议120 6.4.3 文件分析123 6.5 混合持久化124 6.6 RDB与AOF相关配置指令125 6.7 小结126 第7章 主从复制127 7.1 主从复制功能的实现127 7.1.1 主从复制方案的原理与演进128 7.1.2 主从复制的优化方案130 7.2 主从复制源码分析131 7.3 Slave源码分析135 7.4 Master源码分析141 7.5 小结145 第8章 哨兵146 8.1 哨兵简介146 8.2 哨兵的启动147 8.2.1 哨兵配置147 8.2.2 启动流程148 8.3 哨兵相关的数据结构150 8.4 哨兵的工作原理152 8.4.1 与Master节点及Slave节点 建立连接152 8.4.2 与其他哨兵建立连接155 8.5 故障转移157 8.6 小结161 第9章 集群162 9.1 数据分区163 9.2 通信机制165 9.2.1 维护元数据的方案165 9.2.2 通信数据的类型167 9.3 代码流程172 9.3.1 初始化173 9.3.2 定时任务173 9.4 主从切换175 9.4.1 自动切换176 9.4.2 手动切换181 9.5 副本漂移181 9.6 分片迁移185 9.7 小结186 第10章 Redis应用:缓存与锁187 10.1 缓存187 10.1.1 常见问题及解决方案187 10.1.2 大key问题191 10.2 锁194 10.2.1 单机悲观锁196 10.2.2 单机乐观锁199 10.2.3 官方**的Redlock203 10.3 客户端缓存207 10.3.1 基础知识207 10.3.2 客户端缓存的使用208 10.3.3 源码分析211 10.4 小结216