《数据库技术丛书 Redis5设计与源码分析》PDF下载

  • 购买积分:14 如何计算积分?
  • 作  者:(中国)陈雷
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2019
  • ISBN:9787111632788
  • 页数:417 页
图书介绍:本书分为三篇,共计22章内容。第一篇,重点讲解了SDS、跳跃表、压缩列表、字典、整数集合、quicklist和Stream数据结构的实现。第二篇,讲解了Redis的生命周期、命令执行的过程,键、字符串、哈希表、列表、集合、有序集合、GEO、HyperLog和Stream相关命令的实现,需要重点了解。第三篇,简单剖析了持久化、主从复制和集群的实现,掌握精髓。

第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 其余API 15

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 常用API 83

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 常用API 100

7.5 本章小结 101

第8章 Stream 102

8.1 Stream简介 102

8.1.1 Stream底层结构listpack 103

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 对象结构体robj 132

9.1.2 客户端结构体client 136

9.1.3 服务端结构体redisServer 138

9.1.4 命令结构体redisCommand 139

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 对象结构体redisObject 164

10.1.2 数据库结构体redisDb 166

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 计算坐标的geohash 291

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 RDB 358

20.1.1 RDB执行流程 358

20.1.2 RDB文件结构 359

20.2 AOF 367

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