目 錄 Contents
序
前言
第1章 Redis必會(huì)知識(shí) 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 對(duì)象 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 基本實(shí)現(xiàn) 25
2.4.2 字典擴(kuò)容 28
2.5 集合 30
2.5.1 intset簡(jiǎn)介 31
2.5.2 數(shù)據(jù)存儲(chǔ) 31
2.6 有序集合 33
2.6.1 跳躍表簡(jiǎn)介 33
2.6.2 數(shù)據(jù)存儲(chǔ) 36
2.7 小結(jié) 37
第3章 stream底層數(shù)據(jù)結(jié)構(gòu) 38
3.1 stream簡(jiǎn)介 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的實(shí)現(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)的實(shí)現(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啟動(dòng)流程 64
4.1 redisServer簡(jiǎn)介 64
4.2 sever啟動(dòng)過(guò)程 65
4.2.1 server初始化 65
4.2.2 啟動(dòng)監(jiān)聽 68
4.3 事件處理 71
4.3.1 文件事件 72
4.3.2 時(shí)間事件 77
4.4 小結(jié) 80
第5章 一次命令請(qǐng)求過(guò)程 81
5.1 基礎(chǔ)知識(shí) 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源碼實(shí)現(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é)議與二進(jìn)制協(xié)議 113
6.1.4 大小端 114
6.2 持久化配置 115
6.3 AOF 116
6.3.1 同步時(shí)機(jī) 116
6.3.2 always策略安全性 116
6.3.3 命令同步 118
6.3.4 重寫機(jī)制 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ù)制功能的實(shí)現(xiàn) 127
7.1.1 主從復(fù)制方案的原理與演進(jìn) 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 哨兵簡(jiǎn)介 146
8.2 哨兵的啟動(dòng) 147
8.2.1 哨兵配置 147
8.2.2 啟動(dòng)流程 148
8.3 哨兵相關(guān)的數(shù)據(jù)結(jié)構(gòu) 150
8.4 哨兵的工作原理 152
8.4.1 與Master節(jié)點(diǎn)及Slave節(jié)點(diǎn)
建立連接 152
8.4.2 與其他哨兵建立連接 155
8.5 故障轉(zhuǎn)移 157
8.6 小結(jié) 161
第9章 集群 162
9.1 數(shù)據(jù)分區(qū) 163
9.2 通信機(jī)制 165
9.2.1 維護(hù)元數(shù)據(jù)的方案 165
9.2.2 通信數(shù)據(jù)的類型 167
9.3 代碼流程 172
9.3.1 初始化 173
9.3.2 定時(shí)任務(wù) 173
9.4 主從切換 175
9.4.1 自動(dòng)切換 176
9.4.2 手動(dòng)切換 181
9.5 副本漂移 181
9.6 分片遷移 185
9.7 小結(jié) 186
第10章 Redis應(yīng)用:緩存與鎖 187
10.1 緩存 187
10.1.1 常見問(wèn)題及解決方案 187
10.1.2 大key問(wèn)題 191
10.2 鎖 194
10.2.1 單機(jī)悲觀鎖 196
10.2.2 單機(jī)樂觀鎖 199
10.2.3 官方推薦的Redlock 203
10.3 客戶端緩存 207
10.3.1 基礎(chǔ)知識(shí) 207
10.3.2 客戶端緩存的使用 208
10.3.3 源碼分析 211
10.4 小結(jié) 216