本書共5章。其中,第1章從一條命令的執(zhí)行開始,勾勒出Redis的數(shù)據(jù)存儲(chǔ)原理和整體架構(gòu);第2章介紹了所有數(shù)據(jù)類型的實(shí)現(xiàn)原理和應(yīng)用實(shí)戰(zhàn);第3章介紹了RDB快照、AOF、主從復(fù)制架構(gòu)、哨兵集群和Redis Cluster的原理及使用方法;第4章介紹了Redis事務(wù)、內(nèi)存管理、事件驅(qū)動(dòng)、發(fā)布/訂閱機(jī)制、客戶端緩存和I/O多線程模型;第5章介紹了性能排查與解決問(wèn)題的檢查清單、使用規(guī)范、內(nèi)存優(yōu)化技巧、生產(chǎn)王者必備配置、緩存使用策略和分布式鎖演進(jìn)原理。
微信公眾號(hào)“碼哥字節(jié)”作者、InfoQ簽約作者、后端架構(gòu)師,9 年互聯(lián)網(wǎng)金融后端從業(yè)經(jīng)驗(yàn)。擅長(zhǎng)Redis、Spring、Kafka、MySQL 等技術(shù),對(duì)云原生微服務(wù)有著深入的研究,喜歡用簡(jiǎn)潔、風(fēng)趣、幽默的語(yǔ)言,將各種技術(shù)的知識(shí)點(diǎn)或深或淺地展開,分享自己在成長(zhǎng)過(guò)程中積累的經(jīng)驗(yàn)和正確提升技術(shù)水平的方法論。
第1章 起勢(shì)入門 1
1.1 從頭說(shuō)起 1
1.1.1 Redis能做什么 1
1.1.2 源碼編譯 2
1.1.3 目錄結(jié)構(gòu) 7
1.2 整體架構(gòu) 8
1.2.1 數(shù)據(jù)存儲(chǔ)原理 10
1.2.2 一條命令的執(zhí)行過(guò)程 14
第2章 核心筑基——數(shù)據(jù)結(jié)構(gòu)與心法 23
2.1 字符串 23
2.1.1 是什么 23
2.1.2 修煉心法 24
2.1.3 出招實(shí)戰(zhàn):分布式 ID 生成器 27
2.2 Lists 28
2.2.1 是什么 28
2.2.2 修煉心法 28
2.2.3 出招實(shí)戰(zhàn):消息隊(duì)列 36
2.3 Sets 40
2.3.1 是什么 40
2.3.2 修煉心法 41
2.3.3 出招實(shí)戰(zhàn):共同好友 43
2.4 散列表 44
2.4.1 是什么 44
2.4.2 修煉心法 45
2.4.3 出招實(shí)戰(zhàn):購(gòu)物車 49
2.5 Sorted Sets 52
2.5.1 是什么 52
2.5.2 修煉心法 52
2.5.3 出招實(shí)戰(zhàn):排行榜 57
2.6 Stream 59
2.6.1 是什么 59
2.6.2 修煉心法 60
2.6.3 出招實(shí)戰(zhàn):消息隊(duì)列 67
2.7 Geospatial 76
2.7.1 是什么 77
2.7.2 修煉心法 81
2.7.3 出招實(shí)戰(zhàn):附近的人 86
2.8 Bitmap 90
2.8.1 是什么 90
2.8.2 修煉心法 91
2.8.3 出招實(shí)戰(zhàn):登錄判斷、簽到統(tǒng)計(jì)系統(tǒng) 94
2.9 HyperLogLog 97
2.9.1 是什么 97
2.9.2 修煉心法 98
2.9.3 出招實(shí)戰(zhàn):網(wǎng)頁(yè)訪問(wèn)量統(tǒng)計(jì) 99
2.10 Bloom Filter 101
2.10.1 是什么 102
2.10.2 修煉心法 102
2.10.3 出招實(shí)戰(zhàn):緩存穿透預(yù)防 103
2.11 Redis 高性能的原因 106
2.11.1 基于內(nèi)存實(shí)現(xiàn) 107
2.11.2 I/O 多路復(fù)用模型 108
2.11.3 單線程模型 110
2.11.4 高效的數(shù)據(jù)結(jié)構(gòu) 112
2.11.5 全局散列表 113
第3章 不死之身——高可用 114
3.1 宕機(jī)恢復(fù),不丟數(shù)據(jù)穩(wěn)如山 114
3.1.1 RDB 快照 114
3.1.2 AOF 118
3.2 主從復(fù)制架構(gòu) 125
3.2.1 主從數(shù)據(jù)同步原理 127
3.2.2 主從同步的缺點(diǎn) 135
3.3 哨兵集群 136
3.3.1 哨兵的任務(wù) 138
3.3.2 哨兵集群原理 143
3.4 Redis 集群 147
3.4.1 Redis 集群是什么 148
3.4.2 Redis 集群的原理 150
3.4.3 集群配置注意事項(xiàng) 164
第4章 結(jié)丹飛升——高級(jí)技能進(jìn)階 165
4.1 Redis 事務(wù)修煉手冊(cè) 165
4.1.1 什么是事務(wù)的 ACID 165
4.1.2 Redis 如何實(shí)現(xiàn)事務(wù) 166
4.1.3 Redis 事務(wù)滿足 ACID 嗎 168
4.2 Redis內(nèi)存管理 174
4.2.1 淘汰策略概述 174
4.2.2 過(guò)期刪除策略 183
4.3 Redis事件驅(qū)動(dòng):文件和時(shí)間的協(xié)奏曲 185
4.3.1 Redis server 啟動(dòng)入口 186
4.3.2 文件事件 190
4.3.3 時(shí)間事件 191
4.4 Redis 發(fā)布/訂閱機(jī)制深度解析 194
4.4.1 發(fā)布/訂閱機(jī)制簡(jiǎn)介 194
4.4.2 發(fā)布/訂閱機(jī)制實(shí)戰(zhàn) 195
4.4.3 原理分析 199
4.4.4 使用場(chǎng)景 204
4.5 性能必殺技之客戶端緩存 205
4.5.1 為什么需要客戶端緩存 205
4.5.2 客戶端緩存實(shí)現(xiàn)原理 207
4.5.3 源碼解析 211
4.6 性能必殺技之 Redis I/O多線程模型 213
4.6.1 單線程模型真的只有一個(gè)線程嗎 213
4.6.2 線程模型的演化 214
4.6.3 I/O多線程模型解讀 215
4.7 Redis 內(nèi)存碎片深度解析與優(yōu)化策略 221
4.7.1 數(shù)據(jù)已刪,釋放的內(nèi)存去哪了 221
4.7.2 什么是內(nèi)存碎片 223
4.7.3 內(nèi)存碎片的形成原因 223
4.7.4 內(nèi)存碎片解決之道 224
第5章 元嬰大成——出師實(shí)戰(zhàn) 227
5.1 Redis 性能排查與解決問(wèn)題的終極檢查清單 227
5.1.1 性能基線測(cè)量 227
5.1.2 慢命令監(jiān)控 229
5.1.3 解決性能問(wèn)題的終極檢查清單 230
5.2 Redis 很強(qiáng),不懂使用規(guī)范就糟蹋了 237
5.2.1 key-value使用規(guī)范 237
5.2.2 命令使用規(guī)范 239
5.2.3 數(shù)據(jù)存儲(chǔ)使用規(guī)范 240
5.2.4 SDK使用規(guī)范 240
5.2.5 運(yùn)維規(guī)范 241
5.3 Redis 內(nèi)存優(yōu)化必殺技,小內(nèi)存存儲(chǔ)大數(shù)據(jù) 241
5.3.1 key-value優(yōu)化 242
5.3.2 小數(shù)據(jù)集合編碼優(yōu)化 243
5.3.3 使用對(duì)象共享池 244
5.3.4 使用bit或byte級(jí)別操作 244
5.3.5 巧用Hashes類型優(yōu)化 245
5.3.6 使用內(nèi)存碎片清理功能 246
5.3.7 使用32位的Redis 246
5.4 生產(chǎn)王者必備配置詳解 246
5.4.1 常規(guī)配置 247
5.4.2 RDB 快照持久化 250
5.4.3 主從復(fù)制 251
5.4.4 安全 255
5.4.5 內(nèi)存管理 256
5.4.6 惰性釋放 257
5.4.7 AOF 持久化 259
5.4.8 Redis集群 261
5.4.9 性能監(jiān)控 264
5.4.10 高級(jí)配置 264
5.4.11 在線內(nèi)存碎片清理 270
5.4.12 綁定 CPU 271
5.4.13 sentinel.conf 哨兵 271
5.5 緩存擊穿、緩存穿透、緩存雪崩怎么解決 275
5.5.1 緩存擊穿 275
5.5.2 緩存穿透 277
5.5.3 緩存雪崩 278
5.6 Redis 緩存策略與數(shù)據(jù)庫(kù)一致性問(wèn)題深度剖析 280
5.6.1 緩存策略 281
5.6.2 緩存與數(shù)據(jù)庫(kù)一致性是什么 287
5.6.3 旁路緩存的問(wèn)題分析 287
5.6.4 數(shù)據(jù)庫(kù)與緩存一致性解決方案 293
5.6.5 總結(jié) 295
5.7 Redis 分布式鎖演進(jìn)原理與實(shí)戰(zhàn) 296
5.7.1 為什么需要分布式鎖 296
5.7.2 入門級(jí)分布式鎖 297
5.7.3 釋放別人的鎖 299
5.7.4 可重入鎖 300
5.7.5 正確配置鎖過(guò)期時(shí)間 303
5.7.6 Redis 部署方式對(duì)鎖的影響 307
5.7.7 紅鎖 307
5.7.8 紅鎖的是與非 308