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

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了