阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      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
      目录
      目录