新书推荐

《Redis 5设计与源码分析》

点击上图了解及购买

好未来、滴滴、百度等公司专家联合撰写,掌握Redis 5设计与命令实现,透彻掌握分布式缓存。

编辑推荐

多名专家联袂推荐,资深专家联合撰写,深入理解Redis 5设计精髓。

系统讲解Redis 5设计、数据结构、底层命令实现,以及持久化、主从复制、集群。

内容简介

多名专家联袂推荐,资深专家联合撰写,深入理解Redis 5设计精髓。本书系统讲解Redis 5设计、数据结构、底层命令实现,以及持久化、主从复制、集群的实现。全书分为三篇,共计22章内容。

  • 第一篇,重点讲解了SDS、跳跃表、压缩列表、字典、整数集合、quicklist和Stream数据结构的实现。

  • 第二篇,讲解了Redis的生命周期、命令执行的过程,键、字符串、哈希表、列表、集合、有序集合、GEO、HyperLog和Stream相关命令的实现,需要重点了解。

  • 第三篇,简单剖析了持久化、主从复制和集群的实现,掌握精髓。

作者简介

陈雷,好未来学而思网校增长研发负责人,清华与北京邮电大学硕士,曾在百度、腾讯和滴滴等公司工作,12年后端架构经验。合著有《PHP7底层设计与源码实现》。

方波,资深工程师,先后就职于360、百度、滴滴,设计并开发360消息系统Qbus、Nginx接入层、电商网站架构等分布式高并发系统。

黄桃,好未来学而思网校架构师,从事互联网服务端研发与架构工作多年,熟悉PHP、Nginx、Redis等源码实现,乐于学习与分享。合著有《PHP 7底层设计与源码实现》。

李乐,好未来PHP工程师,西安电子科技大学硕士,乐于钻研技术与源码研究,对Redis和Nginx有较深理解。

施洪宝, 好未来后端研发工程师,东南大学硕士,对Redis、Nginx等开源软件有较深的理解,熟悉C/C++开发,对高并发、分布式有浓厚兴趣,曾发表EI论文2篇,。

熊浩含,百度研发工程师、PHP开发者,对Redis等开源软件有较深的研究。乐于钻研技术难点,喜欢折腾,在学习思路上有很好的方法论。

闫昌,好未来后端软件开发工程师,深耕信息安全领域多年,对Linux下服务端开发有较深见解,擅长高并发业务的实现。

张仕华,滴滴资深软件开发工程师,热衷于研究高并发场景下的架构设计及实现,熟悉Redis、Nginx和LevelDB等源码,热衷于探究技术本质。

周生政,滴滴后端高级工程师,多年LNMP技术栈开发经验,曾任北京环球购物电商后端技术负责人。热衷于Linux平台效率工具, 熟悉Bash、Docker等自动化工具。

目录

前言

第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 5设计与源码分析》相关推荐

  1. 新书推荐 |《5G NR标准:下一代无线通信技术》

    新书推荐 <5G NR标准:下一代无线通信技术> 点击上图了解及购买 本书以3GPP 2018年9月制定的R15版5G商用标准为基础,详解5G NR标准技术规范和成因 ,爱立信5G标准专家 ...

  2. 5G NR 标准:下一代无线通信技术

    昨天有一篇混子曰的文章,用通俗易懂的漫画方式为大家讲解了5G到底是什么东西,经过翻阅文章,我们也了解了一二,但是你只表面的知道了5G这个概念,但是深入的话还是没有了解,所以下面将继续讲5G技术规范NR ...

  3. 5G NR标准 第1章 什么是5G

    5G NR标准 第1章 5G概述 在过去的40年里,全球已经经历了四代移动通信(如图1.1) 第一代移动通信是在1980年左右出现的,以模拟传输为基础,主要技术是北美开发的AMPS (Advanced ...

  4. 5G NR标准 第5章 NR概览

    5G NR标准 第5章 NR概览 图5.1概述了3GPP中NR开发的时间表. 基于3GPP版本14的研究项目,NR的技术工作于2016年春季启动,该项目基于2015年秋季的启动研讨会.在研究项目阶段, ...

  5. 5G NR标准 第4章 LTE概述

    5G NR标准 第4章 LTE概述 LTE的工作始于2004年底,其总体目标是提供一种仅关注分组交换数据的新型无线接入技术. LTE规范的第一个版本,即第8版,已于2008年完成,商业网络的运营于20 ...

  6. 5G NR标准 第3章 5G频谱

    5G NR标准 第3章 5G频谱 3.1 移动系统的频谱 不同频率的频带具有不同的特性. 由于传播特性,较低频率的频段非常适合在城市,郊区和乡村环境中进行广域覆盖部署. 较高频率的传播特性使它们更难用 ...

  7. 《5G NR标准:下一代无线通信技术》读书笔记——NR概述

    目录 二.NR概述 1.与LTE相比,NR好处 2.高频操作和频谱灵活性 3.极简设计 4.向前兼容 5.传输方案/部分带宽和帧结构 6.双工方式 7.低时延支持 8.调度和数据传输 9.控制信道 1 ...

  8. 《5G NR标准:下一代无线通信技术》读书笔记——LTE概述

    目录 一.LTE概述 1.频谱灵活性 1.1载波聚合 1.2授权辅助接入 2.多天线增强 2.1扩展的多天线传输 2.2多点协作和传输 2.3增强的控制信道结构 3.密集度.微蜂窝和异构部署 3.1中 ...

  9. 5G NR标准: 第20章 5G的演进

    第20章 5G的演进 NR 的第一个版本,第 15 版,侧重于对 eMBB 的基本支持,在某种程度上,URLLC.1 如前几章所述,第 15 版是为即将发布的 NR 未来发展构建的基础 . NR 演进 ...

  10. 5G NR标准 第13章 重传协议

    第13章 重传协议 通过无线信道的传输容易出错,例如,由于接收信号质量的变化. 在某种程度上,这种变化可以通过第 14 章中讨论的链路适配来抵消.但是,接收机噪声和不可预测的干扰变化无法抵消. 因此, ...

最新文章

  1. day8 动态导入模块、socket进阶
  2. Kotlin威胁、Python逆袭,2018年程序员需要升级哪些技能?(附报告下载)
  3. 使Struts2与Servlet并存解决办法 Filter转发Servlet
  4. 妙笔生花:一个易用、高效的文本生成开源库
  5. 获取滚动条距离底部的高度
  6. 使用Azure Blob存储托管Maven工件
  7. el replace 表达式_EL表达式运算符、常用函数详解
  8. 报错,o.h.engine.jdbc.spi.SqlExceptionHelper : Data truncation: Data too long for column ‘verify_msg‘
  9. substr判断最后一个是不是逗号_考研最后一个月是不是很累?
  10. 配置 SQL Server 2005 以允许远程连接(服务器端)
  11. -webkit-text-size-adjust
  12. cookie 存放位置
  13. 私家车对PM2.5的贡献到底有多少?
  14. Linux与Windows命令行杀死端口命令
  15. 通过ICommand和ITool操作地图
  16. android 格式化sd咔_如何在Android中格式化SD卡 | MOS86
  17. html datetime控件 到时分秒,日期控件:datepicker(bootstrap)支持时分秒
  18. 健康知识竞答线上活动方案——微信答题小程序实现
  19. 【汇正财经】上证50逆势收涨,大盘健康震固
  20. Oracle 判断正负数函数 sign

热门文章

  1. 行业观点|鞋企转战个性化定制 打响新消费时尚
  2. scala列表-List.tabulate方法
  3. AC_AttitudeControl_Heli.cpp的AC_AttitudeControl_Heli::rate_target_to_motor_yaw函数代码分析
  4. 云服务案例分析 BB平台 Quiz5
  5. 股市The Stock Market
  6. 计算机没去考 禁考一年,自考报名不去考会禁考吗 弃考有什么影响
  7. Java 集合深入理解(10):Deque 双端队列
  8. STL-老子的全排列呢
  9. 使用steamcommunity302加速github访问
  10. java正则表达式 字符串取开头数字 结尾数字 取反