目 錄 Contents
序
前言
第1章 Redis必會知識 1
1.1 Redis 6.0的新特性 2
1.2 Redis源碼結(jié)構(gòu) 2
1.3 Redis的安裝與調(diào)試 3
1.4 小結(jié) 6
第2章 基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)解析 7
2.1 對象 7
2.2 字符串 11
2.3 列表 15
2.3.1 list 15
2.3.2 ziplist 16
2.3.3 quicklist 18
2.4 字典 25
2.4.1 基本實現(xiàn) 25
2.4.2 字典擴容 28
2.5 集合 30
2.5.1 intset簡介 31
2.5.2 數(shù)據(jù)存儲 31
2.6 有序集合 33
2.6.1 跳躍表簡介 33
2.6.2 數(shù)據(jù)存儲 36
2.7 小結(jié) 37
第3章 stream底層數(shù)據(jù)結(jié)構(gòu) 38
3.1 stream簡介 38
3.1.1 listpack 39
3.1.2 rax 41
3.1.3 stream結(jié)構(gòu) 44
3.2 stream底層結(jié)構(gòu)listpack
與rax的實現(xiàn) 49
3.2.1 初始化 49
3.2.2 查找元素 49
3.2.3 添加元素 51
3.2.4 刪除元素 53
3.2.5 遍歷元素 55
3.3 stream結(jié)構(gòu)的實現(xiàn) 55
3.3.1 初始化 55
3.3.2 添加元素 56
3.3.3 刪除元素 57
3.3.4 查找元素 60
3.3.5 遍歷元素 61
3.4 小結(jié) 63
第4章 Redis啟動流程 64
4.1 redisServer簡介 64
4.2 sever啟動過程 65
4.2.1 server初始化 65
4.2.2 啟動監(jiān)聽 68
4.3 事件處理 71
4.3.1 文件事件 72
4.3.2 時間事件 77
4.4 小結(jié) 80
第5章 一次命令請求過程 81
5.1 基礎(chǔ)知識 81
5.1.1 客戶端結(jié)構(gòu)體client 81
5.1.2 命令結(jié)構(gòu)體redisCommand 83
5.2 I/O多線程 86
5.2.1 I/O線程管理 87
5.2.2 I/O線程同步 89
5.3 RESP 3協(xié)議 92
5.4 命令解析 96
5.5 命令調(diào)用 98
5.6 ACL權(quán)限控制 100
5.6.1 ACL概述 100
5.6.2 ACL源碼實現(xiàn) 104
5.7 結(jié)果返回 105
5.8 小結(jié) 108
第6章 持久化 109
6.1 備份原理 109
6.1.1 內(nèi)存數(shù)據(jù)安全落盤 110
6.1.2 異步復(fù)制 112
6.1.3 文本協(xié)議與二進制協(xié)議 113
6.1.4 大小端 114
6.2 持久化配置 115
6.3 AOF 116
6.3.1 同步時機 116
6.3.2 always策略安全性 116
6.3.3 命令同步 118
6.3.4 重寫機制 119
6.4 RDB 119
6.4.1 執(zhí)行流程 119
6.4.2 RDB協(xié)議 120
6.4.3 文件分析 123
6.5 混合持久化 124
6.6 RDB與AOF相關(guān)配置指令 125
6.7 小結(jié) 126
第7章 主從復(fù)制 127
7.1 主從復(fù)制功能的實現(xiàn) 127
7.1.1 主從復(fù)制方案的原理與演進 128
7.1.2 主從復(fù)制的優(yōu)化方案 130
7.2 主從復(fù)制源碼分析 131
7.3 Slave源碼分析 135
7.4 Master源碼分析 141
7.5 小結(jié) 145
第8章 哨兵 146
8.1 哨兵簡介 146
8.2 哨兵的啟動 147
8.2.1 哨兵配置 147
8.2.2 啟動流程 148
8.3 哨兵相關(guān)的數(shù)據(jù)結(jié)構(gòu) 150
8.4 哨兵的工作原理 152
8.4.1 與Master節(jié)點及Slave節(jié)點
建立連接 152
8.4.2 與其他哨兵建立連接 155
8.5 故障轉(zhuǎn)移 157
8.6 小結(jié) 161
第9章 集群 162
9.1 數(shù)據(jù)分區(qū) 163
9.2 通信機制 165
9.2.1 維護元數(shù)據(jù)的方案 165
9.2.2 通信數(shù)據(jù)的類型 167
9.3 代碼流程 172
9.3.1 初始化 173
9.3.2 定時任務(wù) 173
9.4 主從切換 175
9.4.1 自動切換 176
9.4.2 手動切換 181
9.5 副本漂移 181
9.6 分片遷移 185
9.7 小結(jié) 186
第10章 Redis應(yīng)用:緩存與鎖 187
10.1 緩存 187
10.1.1 常見問題及解決方案 187
10.1.2 大key問題 191
10.2 鎖 194
10.2.1 單機悲觀鎖 196
10.2.2 單機樂觀鎖 199
10.2.3 官方推薦的Redlock 203
10.3 客戶端緩存 207
10.3.1 基礎(chǔ)知識 207
10.3.2 客戶端緩存的使用 208
10.3.3 源碼分析 211
10.4 小結(jié) 216