多名專家聯袂推薦,資深專家聯合撰寫,深入理解Redis 5設計精髓。本書系統講解Redis 5設計、數據結構、底層命令實現,
以及持久化、主從復制、集群的實現。
全書分為三篇,共計22章內容。
第一篇,重點講解了SDS、跳躍表、壓縮列表、字典、整數集合、quicklist和Stream數據結構的實現。
第二篇,講解了Redis的生命周期、命令執行的過程,鍵、字符串、哈希表、列表、集合、有序集合、GEO、HyperLog
和Stream相關命令的實現,需要重點了解。
第三篇,簡單剖析了持久化、主從復制和集群的實現,掌握精髓。
第1章 引言
1.1 Redis 簡介
1.2 Redis 5.0的新特性
1.3 Redis源碼概述
1.4 Redis安裝與調試
1.5 本章小結
第2章 簡單動態字符串
2.1 數據結構
2.2 基本操作
2.2.1 創建字符串
2.2.2 釋放字符串
2.2.3 拼接字符串
2.2.4 其余API
2.3 本章小結
第3章 跳躍表
3.1 簡介
3.2 跳躍表節點與結構
3.2.1 跳躍表節點
3.2.2 跳躍表結構
3.3 基本操作
3.3.1 創建跳躍表
3.3.2 插入節點
3.3.3 刪除節點
3.3.4 刪除跳躍表
3.4 跳躍表的應用
3.5 本章小結
第4章 壓縮列表
4.1 壓縮列表的存儲結構
4.2 結構體
4.3 基本操作
4.3.1 創建壓縮列表
4.3.2 插入元素
4.3.3 刪除元素
4.3.4 遍歷壓縮列表
4.4 連鎖更新
4.5 本章小結
第5章 字典
5.1 基本概念
5.1.1 數組
5.1.2 Hash函數
5.1.3 Hash沖突
5.2 Redis字典的實現
5.3 基本操作
5.3.1 字典初始化
5.3.2 添加元素
5.3.3 查找元素
5.3.4 修改元素
5.3.5 刪除元素
5.4 字典的遍歷
5.4.1 迭代器遍歷
5.4.2 間斷遍歷
5.5 API列表
5.6 本章小結
第6章 整數集合
6.1 數據存儲
6.2 基本操作
6.2.1 查詢元素
6.2.2 添加元素
6.2.3 刪除元素
6.2.4 常用API
6.3 本章小結
第7章 quicklist的實現
7.1 quicklist簡介
7.2 數據存儲
7.3 數據壓縮
7.3.1 壓縮
7.3.2 解壓縮
7.4 基本操作
7.4.1 初始化
7.4.2 添加元素
7.4.3 刪除元素
7.4.4 更改元素
7.4.5 查找元素
7.4.6 常用API
7.5 本章小結
第8章 Stream
8.1 Stream簡介
8.1.1 Stream底層結構listpack
8.1.2 Stream底層結構Ra簡介
8.1.3 Stream結構
8.2 Stream底層結構listpack的實現
8.2.1 初始化
8.2.2 增刪改操作
8.2.3 遍歷操作
8.2.4 讀取元素
8.3 Stream底層結構Ra的實現
8.3.1 初始化
8.3.2 查找元素
8.3.3 添加元素
8.3.4 刪除元素
8.3.5 遍歷元素
8.4 Stream結構的實現
8.4.1 初始化
8.4.2 添加元素
8.4.3 刪除元素
8.4.4 查找元素
8.4.5 遍歷
8.5 本章小結
第9章 命令處理生命周期
9.1 基本知識
9.1.1 對象結構體robj
9.1.2 客戶端結構體client
9.1.3 服務端結構體redisServer
9.1.4 命令結構體redisCommand
9.1.5 事件處理
9.2 server啟動過程
9.2.1 server初始化
9.2.2 啟動監聽
9.3 命令處理過程
9.3.1 命令解析
9.3.2 命令調用
9.3.3 返回結果
9.4 本章小結
第10章 鍵相關命令的實現
10.1 對象結構體和數據庫結構體回顧
10.1.1 對象結構體redisObject
10.1.2 數據庫結構體redisDb
10.2 查看鍵信息
10.2.1 查看鍵屬性
10.2.2 查看鍵類型
10.2.3 查看鍵過期時間
10.3 設置鍵信息
10.3.1 設置鍵過期時間
10.3.2 刪除鍵過期時間
10.3.3 重命名鍵
10.3.4 修改鍵最后訪問
10.4 查找鍵
10.4.1 判斷鍵是否存在
10.4.2 查找符合模式的鍵
10.4.3 遍歷鍵
10.4.4 隨機取鍵
10.5 操作鍵
10.5.1 刪除鍵
10.5.2 序列化/反序列化鍵
10.5.3 移動鍵
10.5.4 鍵排序
10.6 本章小結
第11章 字符串相關命令的實現
11.1 相關命令介紹
11.2 設置字符串
11.2.1 set命令
11.2.2 mset命令
11.3 修改字符串
11.3.1 append命令
11.3.2 setrange命令
11.3.3 計數器命令
11.4 字符串獲取
11.4.1 get命令
11.4.2 getset命令
11.4.3 getrange命令
11.4.4 strlen命令
11.4.5 mget命令
11.5 字符串位操作
11.5.1 setbit命令
11.5.2 getbit命令
11.5.3 bitpos命令
11.5.4 bitcount命令
11.5.5 bitop命令
11.5.6 bitfield命令
11.6 本章小結
第12章 散列表相關命令的實現
12.1 簡介
12.1.1 底層存儲
12.1.2 底層存儲轉換
12.1.3 接口說明
12.2 設置命令
12.3 讀取命令
12.3.1 heists命令
12.3.2 hget/hmget命令
12.3.3 hkeys/hvals/hgetall命令
12.3.4 hlen命令
12.3.5 hscan命令
12.4 刪除命令
12.5 自增命令
12.6 本章小結
第13章 列表相關命令的實現
13.1 相關命令介紹
13.1.1 命令列表
13.1.2 棧和隊列命令列表
13.2 push/pop相關命令
13.2.1 push類命令的實現
13.2.2 pop類命令的實現
13.2.3 阻塞push/pop類命令的實現
13.3 獲取列表數據
13.3.1 獲取單個元素
13.3.2 獲取多個元素
13.3.3 獲取列表長度
13.4 操作列表
13.4.1 設置元素
13.4.2 插入元素
13.4.3 刪除元素
13.4.4 裁剪列表
13.5 本章小結
第14章 集合相關命令的實現
14.1 相關命令介紹
14.2 集合運算
14.2.1 交集
14.2.2 並集
14.2.3 差集
14.3 本章小結
第15章 有序集合相關命令的實現
15.1 相關命令介紹
15.2 基本操作
15.2.1 添加成員
15.2.2 刪除成員
15.2.3 基數統計
15.2.4 數量計算
15.2.5 計數器
15.2.6 獲取排名
15.2.7 獲取分值
15.2.8 遍歷
15.3 批量操作
15.3.1 范圍查找
15.3.2 范圍刪除
15.4 集合運算
15.5 本章小結
第16章 GEO相關命令
16.1 基礎知識
16.2 命令實現
16.2.1 使用geoadd添加坐標
16.2.2 計算坐標的geohash
16.2.3 使用geopos查詢位置經緯度
16.2.4 使用geodist計算兩點距離
16.2.5 使用georadius/georadius-bymembe查詢范圍內元素
16.3 本章小結
第17章 HyperLogLog相關命令的實現
17.1 基本原理
17.1.1 算法演進
17.1.2 線性計數算法
17.1.3 對數計數算法
17.1.4 自適應計數算法
17.1.5 超對數計數算法
17.2 HLL Redis實現
17.2.1 HLL頭對象
17.2.2 稀疏編碼
17.2.3 密集編碼
17.2.4 內部編碼
17.2.5 編碼轉換
17.3 命令實現
17.3.1 添加基數
17.3.2 近似基數
17.3.3 合並基數
17.4 本章小結
第18章 數據流相關命令的實現
18.1 相關命令介紹
18.2 基本操作命令原理分析
18.2.1 添加消息
18.2.2 刪除消息
18.2.3 范圍查找
18.2.4 獲取隊列信息
18.2.5 長度統計
18.2.6 剪切消息
18.3 分組命令原理分析
18.3.1 分組管理
18.3.2 消費消息
18.3.3 響應消息
18.3.4 獲取未響應消息列表
18.3.5 修改指定未響應消息歸屬
18.4 本章小結
第19章 其他命令
19.1 事務
19.1.1 事務簡介
19.1.2 事務命令實現
19.2 發布-訂閱命令實現
19.3 Lua腳本
19.3.1 初始化Lua環境
19.3.2 在Lua中調用Redis命令
19.3.3 Redis和Lua數據類型轉換
19.3.4 命令實現
19.4 本章小結
第20章 持久化
20.1 RDB
20.1.1 RDB執行流程
20.1.2 RDB文件結構
20.2 AOF
20.2.1 AOF執行流程
20.2.2 AOF重寫
20.3 RDB與AOF相關配置指令
20.4 本章小結
第21章 主從復制
21.1 主從復制功能實現
21.2 主從復制源碼基礎
21.3 slaver源碼分析
21.4 master源碼分析
21.5 本章小結
第22章 哨兵和集群
22.1 哨兵
22.1.1 哨兵簡介
22.1.2 代碼流程
22.1.3 主從切換
22.1.4 常用命令
22.2 集群
22.2.1 集群簡介
22.2.2 代碼流程
22.2.3 主從切換
22.2.4 副本漂移
22.2.5 分片遷移
22.2.6 通信數據包類型
22.3 本章小結