[套装书]Redis 5设计与源码分析+Redis设计与实现(2册)

作者
陈雷 内封:陈雷 方波 黄桃 李乐 施洪宝 熊浩含 闫昌 张仕华 周生政黄健宏
丛书名
数据库技术丛书
出版社
机械工业出版社
ISBN
9787190816143
简要
简介
内容简介书籍计算机书籍 ---------------------------Redis 5设计与源码分析--------------------------- 全书主要分为三部分介绍Redis。第一部分介绍Redis5中使用的数据结构,包括动态字符串、跳跃表、压缩列表、字典、整数集合和快速链表,详细介绍其基本结构及常见操作。第二部分为本书核心篇章,首先介绍了Redis5的启动流程,命令解析流程,之后对Redis5中的命令实现进行了全面的介绍,包括键命令、字符串命令、哈希表命令、列表命令、集合及有序集合命令、地理位置相关的GEO命令、统计相关的HyperLogLog命令。第三部分,主要介绍了Redis5的一些特性及使用,包括事务、持久化、主从复制以及集群等。 ---------------------------Redis设计与实现--------------------------- 《Redis设计与实现》全面而完整地讲解了Redis的内部机制与实现方式,对Redis的大多数单机功能以及所有多机功能的实现原理进行了介绍,展示了这些功能的核心数据结构以及关键的算法思想,图示丰富,描述清晰,并给出大量参考信息。通过阅读本书,读者可以快速、有效地了解Redis的内部构造以及运作机制,更好、更高效地使用Redis。 《Redis设计与实现》主要分为四大部分。第一部分“数据结构与对象”介绍了Redis中的各种对象及其数据结构,并说明这些数据结构如何影响对象的功能和性能。第二部分“单机数据库的实现”对Redis实现单机数据库的方法进行了介绍,包括数据库、RDB持久化、AOF持久化、事件等。第三部分“多机数据库的实现”对Redis的Sentinel、复制、集群三个多机功能进行了介绍。第四部分“独立功能的实现”对Redis中各个相对独立的功能模块进行了介绍,涉及发布与订阅、事务、Lua脚本、排序、二进制位数组、慢查询日志、监视器等。本书作者专门维护了www.redisbook.com网站,提供带有详细注释的Redis源代码,以及本书相关的更新内容。
目录



---------------------------Redis 5设计与源码分析---------------------------


本书赞誉
序
前言
第1章 引言1
1.1 Redis简介1
1.2 Redis 5.0的新特性2
1.3 Redis源码概述3
1.4 Redis安装与调试4
1.5 本章小结6
第2章 简单动态字符串7
2.1 数据结构7
2.2 基本操作11
2.2.1 创建字符串11
2.2.2 释放字符串12
2.2.3 拼接字符串12
2.2.4 其余API15
2.3 本章小结15
第3章 跳跃表17
3.1 简介17
3.2 跳跃表节点与结构19
3.2.1 跳跃表节点19
3.2.2 跳跃表结构20
3.3 基本操作20
3.3.1 创建跳跃表21
3.3.2 插入节点22
3.3.3 删除节点28
3.3.4 删除跳跃表30
3.4 跳跃表的应用31
3.5 本章小结32
第4章 压缩列表33
4.1 压缩列表的存储结构33
4.2 结构体35
4.3 基本操作37
4.3.1 创建压缩列表37
4.3.2 插入元素38
4.3.3 删除元素42
4.3.4 遍历压缩列表44
4.4 连锁更新44
4.5 本章小结45
第5章 字典47
5.1 基本概念47
5.1.1 数组48
5.1.2 Hash函数49
5.1.3 Hash冲突51
5.2 Redis字典的实现52
5.3 基本操作55
5.3.1 字典初始化55
5.3.2 添加元素56
5.3.3 查找元素60
5.3.4 修改元素61
5.3.5 删除元素61
5.4 字典的遍历62
5.4.1 迭代器遍历62
5.4.2 间断遍历65
5.5 API列表70
5.6 本章小结71
第6章 整数集合72
6.1 数据存储72
6.2 基本操作75
6.2.1 查询元素75
6.2.2 添加元素78
6.2.3 删除元素82
6.2.4 常用API83
6.3 本章小结85
第7章 quicklist的实现86
7.1 quicklist简介86
7.2 数据存储87
7.3 数据压缩91
7.3.1 压缩92
7.3.2 解压缩93
7.4 基本操作94
7.4.1 初始化94
7.4.2 添加元素95
7.4.3 删除元素96
7.4.4 更改元素98
7.4.5 查找元素99
7.4.6 常用API100
7.5 本章小结101
第8章 Stream102
8.1 Stream简介102
8.1.1 Stream底层结构listpack103
8.1.2 Stream底层结构Rax简介104
8.1.3 Stream结构108
8.2 Stream底层结构listpack的实现112
8.2.1 初始化112
8.2.2 增删改操作112
8.2.3 遍历操作113
8.2.4 读取元素113
8.3 Stream底层结构Rax的实现114
8.3.1 初始化114
8.3.2 查找元素114
8.3.3 添加元素116
8.3.4 删除元素118
8.3.5 遍历元素120
8.4 Stream结构的实现123
8.4.1 初始化124
8.4.2 添加元素124
8.4.3 删除元素125
8.4.4 查找元素128
8.4.5 遍历129
8.5 本章小结131
第9章 命令处理生命周期132
9.1 基本知识132
9.1.1 对象结构体robj132
9.1.2 客户端结构体client136
9.1.3 服务端结构体redisServer138
9.1.4 命令结构体redisCommand139
9.1.5 事件处理141
9.2 server启动过程149
9.2.1 server初始化149
9.2.2 启动监听152
9.3 命令处理过程155
9.3.1 命令解析156
9.3.2 命令调用159
9.3.3 返回结果161
9.4 本章小结163
第10章 键相关命令的实现164
10.1 对象结构体和数据库结构体回顾164
10.1.1 对象结构体redisObject164
10.1.2 数据库结构体redisDb166
10.2 查看键信息166
10.2.1 查看键属性166
10.2.2 查看键类型169
10.2.3 查看键过期时间170
10.3 设置键信息171
10.3.1 设置键过期时间171
10.3.2 删除键过期时间172
10.3.3 重命名键173
10.3.4 修改键最后访问173
10.4 查找键174
10.4.1 判断键是否存在174
10.4.2 查找符合模式的键175
10.4.3 遍历键176
10.4.4 随机取键177
10.5 操作键178
10.5.1 删除键178
10.5.2 序列化/反序列化键182
10.5.3 移动键183
10.5.4 键排序185
10.6 本章小结187
第11章 字符串相关命令的实现188
11.1 相关命令介绍188
11.2 设置字符串189
11.2.1 set命令189
11.2.2 mset命令195
11.3 修改字符串196
11.3.1 append命令196
11.3.2 setrange命令197
11.3.3 计数器命令197
11.4 字符串获取199
11.4.1 get命令199
11.4.2 getset命令199
11.4.3 getrange命令199
11.4.4 strlen命令200
11.4.5 mget命令201
11.5 字符串位操作201
11.5.1 setbit命令201
11.5.2 getbit命令203
11.5.3 bitpos命令203
11.5.4 bitcount命令205
11.5.5 bitop命令208
11.5.6 bitfield命令209
11.6 本章小结212
第12章 散列表相关命令的实现213
12.1 简介213
12.1.1 底层存储213
12.1.2 底层存储转换215
12.1.3 接口说明215
12.2 设置命令216
12.3 读取命令217
12.3.1 hexists命令218
12.3.2 hget/hmget命令218
12.3.3 hkeys/hvals/hgetall命令219
12.3.4 hlen命令220
12.3.5 hscan命令220
12.4 删除命令221
12.5 自增命令222
12.6 本章小结224
第13章 列表相关命令的实现225
13.1 相关命令介绍225
13.1.1 命令列表225
13.1.2 栈和队列命令列表226
13.2 push/pop相关命令228
13.2.1 push类命令的实现228
13.2.2 pop类命令的实现229
13.2.3 阻塞push/pop类命令的实现230
13.3 获取列表数据234
13.3.1 获取单个元素234
13.3.2 获取多个元素235
13.3.3 获取列表长度236
13.4 操作列表236
13.4.1 设置元素237
13.4.2 插入元素237
13.4.3 删除元素238
13.4.4 裁剪列表239
13.5 本章小结240
第14章 集合相关命令的实现241
14.1 相关命令介绍241
14.2 集合运算254
14.2.1 交集254
14.2.2 并集258
14.2.3 差集260
14.3 本章小结263
第15章 有序集合相关命令的实现264
15.1 相关命令介绍264
15.2 基本操作272
15.2.1 添加成员272
15.2.2 删除成员275
15.2.3 基数统计276
15.2.4 数量计算277
15.2.5 计数器279
15.2.6 获取排名279
15.2.7 获取分值279
15.2.8 遍历280
15.3 批量操作280
15.3.1 范围查找280
15.3.2 范围删除283
15.4 集合运算284
15.5 本章小结284
第16章 GEO相关命令285
16.1 基础知识285
16.2 命令实现288
16.2.1 使用geoadd添加坐标288
16.2.2 计算坐标的geohash291
16.2.3 使用geopos查询位置经纬度292
16.2.4 使用geodist计算两点距离295
16.2.5 使用georadius/georadius-bymembe查询范围内元素295
16.3 本章小结297
第17章 HyperLogLog相关命令的实现298
17.1 基本原理298
17.1.1 算法演进299
17.1.2 线性计数算法299
17.1.3 对数计数算法300
17.1.4 自适应计数算法302
17.1.5 超对数计数算法302
17.2 HLL Redis实现302
17.2.1 HLL头对象303
17.2.2 稀疏编码304
17.2.3 密集编码306
17.2.4 内部编码308
17.2.5 编码转换309
17.3 命令实现310
17.3.1 添加基数310
17.3.2 近似基数311
17.3.3 合并基数313
17.4 本章小结314
第18章 数据流相关命令的实现315
18.1 相关命令介绍315
18.2 基本操作命令原理分析323
18.2.1 添加消息323
18.2.2 删除消息325
18.2.3 范围查找326
18.2.4 获取队列信息327
18.2.5 长度统计327
18.2.6 剪切消息328
18.3 分组命令原理分析328
18.3.1 分组管理328
18.3.2 消费消息330
18.3.3 响应消息331
18.3.4 获取未响应消息列表331
18.3.5 修改指定未响应消息归属331
18.4 本章小结332
第19章 其他命令333
19.1 事务333
19.1.1 事务简介333
19.1.2 事务命令实现334
19.2 发布-订阅命令实现339
19.3 Lua脚本345
19.3.1 初始化Lua环境345
19.3.2 在Lua中调用Redis命令347
19.3.3 Redis和Lua数据类型转换349
19.3.4 命令实现351
19.4 本章小结356
第20章 持久化357
20.1 RDB358
20.1.1 RDB执行流程358
20.1.2 RDB文件结构359
20.2 AOF367
20.2.1 AOF执行流程368
20.2.2 AOF重写369
20.3 RDB与AOF相关配置指令372
20.4 本章小结374
第21章 主从复制375
21.1 主从复制功能实现375
21.2 主从复制源码基础378
21.3 slaver源码分析382
21.4 master源码分析388
21.5 本章小结391
第22章 哨兵和集群392
22.1 哨兵392
22.1.1 哨兵简介393
22.1.2 代码流程394
22.1.3 主从切换396
22.1.4 常用命令399
22.2 集群400
22.2.1 集群简介401
22.2.2 代码流程402
22.2.3 主从切换404
22.2.4 副本漂移406
22.2.5 分片迁移407
22.2.6 通信数据包类型409
22.3 本章小结415



---------------------------Redis设计与实现---------------------------


《Redis设计与实现》
前言
致谢
第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 <key> 命令的实现 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



有问题微信扫码联系

推荐

Understand China
桂ICP备20004708号-4