Redis 设计与实现
Redis 设计与实现
编辑推荐
系统而全面地描述了 Redis 内部运行机制;
图示丰富,描述清晰,并给出大量参考信息,是 NoSQL 数据库开发人员案头必备;
包括大部分 Redis 单机特征,以及所有多机特性。
内容简介
《Redis 设计与实现》对 Redis 的大多数单机功能以及所有多机功能的实现原理进行了介绍,展示了这些功能的核心数据结构以及关键的算法思想。通过阅读本书,读者可以快速、有效地了解 Redis 的内部构造以及运作机制,这些知识可以帮助读者更好、更高效地使用 Redis。本书主要分为四大部分。第一部分“数据结构与对象”介绍了 Redis 中的各种对象及其数据结构,并说明这些数据结构如何影响对象的功能和性能。第二部分“单机数据库的实现”对 Redis 实现单机数据库的方法进行了介绍,包括数据库、RDB 持久化、AOF 持久化、事件等。第三部分“多机数据库的实现”对 Redis 的 Sentinel、复制(replication)、集群(cluster)三个多机功能进行了介绍。第四部分“独立功能的实现”对 Redis 中各个相对独立的功能模块进行了介绍,涉及发布与订阅、事务、Lua 脚本、排序、二进制位数组、慢查询日志、监视器等。
作者简介
黄健宏,软件开发者,他喜欢函数式编程,热爱开源软件。出于对数据库的强烈兴趣,他开始阅读和分析 Redis 源代码,并对 Redis 2.6 和 Redis 3.0 的源代码进行了详细注释。他翻译并维护着 Redis 中文文档网站 www.RedisDoc.com ,编写了 OORedis 库。除此之外,他还是《Redis in Action》一书的译者。
目录
- 前言
- 致谢
第 1 章 引言 1
- 1.1 Redis 版本说明 1
- 1.2 章节编排 1
- 1.3 推荐的阅读方法 4
- 1.4 行文规则 4
- 1.5 配套网站 5
第一部分·数据结构与对象
第 2 章 简单动态字符串 8
- 2.1 SDS 的定义 9
- 2.2 SDS 与 C 字符串的区别 10
- 2.3 SDS API 17
- 2.4 重点回顾 18
- 2.5 参考资料 18
第 3 章 链表 19
- 3.1 链表和链表节点的实现 20
- 3.2 链表和链表节点的 API 21
- 3.3 重点回顾 22
第 4 章 字典 23
- 4.1 字典的实现 24
- 4.2 哈希算法 27
- 4.3 解决键冲突 28
- 4.4 rehash 29
- 4.5 渐进式 rehash 32
- 4.6 字典 API 36
- 4.7 重点回顾 37
第 5 章 跳跃表 38
- 5.1 跳跃表的实现 39
- 5.2 跳跃表 API 44
- 5.3 重点回顾 45
第 6 章 整数集合 46
- 6.1 整数集合的实现 46
- 6.2 升级 48
- 6.3 升级的好处 50
- 6.4 降级 51
- 6.5 整数集合 API 51
- 6.6 重点回顾 51
第 7 章 压缩列表 52
- 7.1 压缩列表的构成 52
- 7.2 压缩列表节点的构成 54
- 7.3 连锁更新 57
- 7.4 压缩列表 API 59
- 7.5 重点回顾 59
第 8 章 对象 60
- 8.1 对象的类型与编码 60
- 8.2 字符串对象 64
- 8.3 列表对象 68
- 8.4 哈希对象 71
- 8.5 集合对象 75
- 8.6 有序集合对象 77
- 8.7 类型检查与命令多态 81
- 8.8 内存回收 84
- 8.9 对象共享 85
- 8.10 对象的空转时长 87
- 8.11 重点回顾 88
第二部分·单机数据库的实现
第 9 章 数据库 90
- 9.1 服务器中的数据库 90
- 9.2 切换数据库 91
- 9.3 数据库键空间 93
- 9.4 设置键的生存时间或过期时间 99
- 9.5 过期键删除策略 107
- 9.6 Redis 的过期键删除策略 108
- 9.7 AOF、RDB 和复制功能对过期键的处理 111
- 9.8 数据库通知 113
- 9.9 重点回顾 117
第 10 章 RDB 持久化 118
- 10.1 RDB 文件的创建与载入 119
- 10.2 自动间隔性保存 121
- 10.3 RDB 文件结构 125
- 10.4 分析 RDB 文件 133
- 10.5 重点回顾 137
- 10.6 参考资料 137
第 11 章 AOF 持久化 138
- 11.1 AOF 持久化的实现 139
- 11.2 AOF 文件的载入与数据还原 142
- 11.3 AOF 重写 143
- 11.4 重点回顾 150
第 12 章 事件 151
- 12.1 文件事件 151
- 12.2 时间事件 156
- 12.3 事件的调度与执行 159
- 12.4 重点回顾 161
- 12.5 参考资料 161
第 13 章 客户端 162
- 13.1 客户端属性 163
- 13.2 客户端的创建与关闭 172
- 13.3 重点回顾 174
第 14 章 服务器 176
- 14.1 命令请求的执行过程 176
- 14.2 serverCron 函数 184
- 14.3 初始化服务器 192
- 14.4 重点回顾 196
第三部分·多机数据库的实现
第 15 章 复制 198
- 15.1 旧版复制功能的实现 199
- 15.2 旧版复制功能的缺陷 201
- 15.3 新版复制功能的实现 203
- 15.4 部分重同步的实现 204
- 15.5 PSYNC 命令的实现 209
- 15.6 复制的实现 211
- 15.7 心跳检测 216
- 15.8 重点回顾 218
第 16 章 Sentinel 219
- 16.1 启动并初始化 Sentinel 220
- 16.2 获取主服务器信息 227
- 16.3 获取从服务器信息 229
- 16.4 向主服务器和从服务器发送信息 230
- 16.5 接收来自主服务器和从服务器的频道信息 231
- 16.6 检测主观下线状态 234
- 16.7 检查客观下线状态 236
- 16.8 选举领头 Sentinel 238
- 16.9 故障转移 240
- 16.10 重点回顾 243
- 16.11 参考资料 244
第 17 章 集群 245
- 17.1 节点 245
- 17.2 槽指派 251
- 17.3 在集群中执行命令 258
- 17.4 重新分片 265
- 17.5 ASK 错误 267
- 17.6 复制与故障转移 273
- 17.7 消息 281
- 17.8 重点回顾 288
第四部分·独立功能的实现
第 18 章 发布与订阅 290
- 18.1 频道的订阅与退订 292
- 18.2 模式的订阅与退订 295
- 18.3 发送消息 298
- 18.4 查看订阅信息 300
- 18.5 重点回顾 303
- 18.6 参考资料 304
第 19 章 事务 305
- 19.1 事务的实现 306
- 19.2 WATCH 命令的实现 310
- 19.3 事务的 ACID 性质 314
- 19.4 重点回顾 319
- 19.5 参考资料 320
第 20 章 Lua 脚本 321
- 20.1 创建并修改 Lua 环境 322
- 20.2 Lua 环境协作组件 327
- 20.3 EVAL 命令的实现 329
- 20.4 EVALSHA 命令的实现 332
- 20.5 脚本管理命令的实现 333
- 20.6 脚本复制 336
- 20.7 重点回顾 342
- 20.8 参考资料 343
第 21 章 排序 344
- 21.1 SORT 命令的实现 345
- 21.2 ALPHA 选项的实现 347
- 21.3 ASC 选项和 DESC 选项的实现 348
- 21.4 BY 选项的实现 350
- 21.5 带有 ALPHA 选项的 BY 选项的实现 352
- 21.6 LIMIT 选项的实现 353
- 21.7 GET 选项的实现 355
- 21.8 STORE 选项的实现 358
- 21.9 多个选项的执行顺序 359
- 21.10 重点回顾 361
第 22 章 二进制位数组 362
- 22.1 位数组的表示 363
- 22.2 GETBIT 命令的实现 365
- 22.3 SETBIT 命令的实现 366
- 22.4 BITCOUNT 命令的实现 369
- 22.5 BITOP 命令的实现 376
- 22.6 重点回顾 377
- 22.7 参考资料 377
第 23 章 慢查询日志 378
- 23.1 慢查询记录的保存 380
- 23.2 慢查询日志的阅览和删除 382
- 23.3 添加新日志 383
- 23.4 重点回顾 385
第 24 章 监视器 386
- 24.1 成为监视器 387
- 24.2 向监视器发送命令信息 387
- 24.3 重点回顾 388