本書共5章。其中,第1章從一條命令的執(zhí)行開始,勾勒出Redis的數(shù)據(jù)存儲原理和整體架構(gòu);第2章介紹了所有數(shù)據(jù)類型的實現(xiàn)原理和應(yīng)用實戰(zhàn);第3章介紹了RDB快照、AOF、主從復(fù)制架構(gòu)、哨兵集群和Redis Cluster的原理及使用方法;第4章介紹了Redis事務(wù)、內(nèi)存管理、事件驅(qū)動、發(fā)布/訂閱機制、客戶端緩存和I/O多線程模型;第5章介紹了性能排查與解決問題的檢查清單、使用規(guī)范、內(nèi)存優(yōu)化技巧、生產(chǎn)王者必備配置、緩存使用策略和分布式鎖演進原理。
微信公眾號“碼哥字節(jié)”作者、InfoQ簽約作者、后端架構(gòu)師,9 年互聯(lián)網(wǎng)金融后端從業(yè)經(jīng)驗。擅長Redis、Spring、Kafka、MySQL 等技術(shù),對云原生微服務(wù)有著深入的研究,喜歡用簡潔、風(fēng)趣、幽默的語言,將各種技術(shù)的知識點或深或淺地展開,分享自己在成長過程中積累的經(jīng)驗和正確提升技術(shù)水平的方法論。
第1章 起勢入門 1
1.1 從頭說起 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ù)存儲原理 10
1.2.2 一條命令的執(zhí)行過程 14
第2章 核心筑基——數(shù)據(jù)結(jié)構(gòu)與心法 23
2.1 字符串 23
2.1.1 是什么 23
2.1.2 修煉心法 24
2.1.3 出招實戰(zhàn):分布式 ID 生成器 27
2.2 Lists 28
2.2.1 是什么 28
2.2.2 修煉心法 28
2.2.3 出招實戰(zhàn):消息隊列 36
2.3 Sets 40
2.3.1 是什么 40
2.3.2 修煉心法 41
2.3.3 出招實戰(zhàn):共同好友 43
2.4 散列表 44
2.4.1 是什么 44
2.4.2 修煉心法 45
2.4.3 出招實戰(zhàn):購物車 49
2.5 Sorted Sets 52
2.5.1 是什么 52
2.5.2 修煉心法 52
2.5.3 出招實戰(zhàn):排行榜 57
2.6 Stream 59
2.6.1 是什么 59
2.6.2 修煉心法 60
2.6.3 出招實戰(zhàn):消息隊列 67
2.7 Geospatial 76
2.7.1 是什么 77
2.7.2 修煉心法 81
2.7.3 出招實戰(zhàn):附近的人 86
2.8 Bitmap 90
2.8.1 是什么 90
2.8.2 修煉心法 91
2.8.3 出招實戰(zhàn):登錄判斷、簽到統(tǒng)計系統(tǒng) 94
2.9 HyperLogLog 97
2.9.1 是什么 97
2.9.2 修煉心法 98
2.9.3 出招實戰(zhàn):網(wǎng)頁訪問量統(tǒng)計 99
2.10 Bloom Filter 101
2.10.1 是什么 102
2.10.2 修煉心法 102
2.10.3 出招實戰(zhàn):緩存穿透預(yù)防 103
2.11 Redis 高性能的原因 106
2.11.1 基于內(nèi)存實現(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 宕機恢復(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 主從同步的缺點 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 集群配置注意事項 164
第4章 結(jié)丹飛升——高級技能進階 165
4.1 Redis 事務(wù)修煉手冊 165
4.1.1 什么是事務(wù)的 ACID 165
4.1.2 Redis 如何實現(xiàn)事務(wù) 166
4.1.3 Redis 事務(wù)滿足 ACID 嗎 168
4.2 Redis內(nèi)存管理 174
4.2.1 淘汰策略概述 174
4.2.2 過期刪除策略 183
4.3 Redis事件驅(qū)動:文件和時間的協(xié)奏曲 185
4.3.1 Redis server 啟動入口 186
4.3.2 文件事件 190
4.3.3 時間事件 191
4.4 Redis 發(fā)布/訂閱機制深度解析 194
4.4.1 發(fā)布/訂閱機制簡介 194
4.4.2 發(fā)布/訂閱機制實戰(zhàn) 195
4.4.3 原理分析 199
4.4.4 使用場景 204
4.5 性能必殺技之客戶端緩存 205
4.5.1 為什么需要客戶端緩存 205
4.5.2 客戶端緩存實現(xiàn)原理 207
4.5.3 源碼解析 211
4.6 性能必殺技之 Redis I/O多線程模型 213
4.6.1 單線程模型真的只有一個線程嗎 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章 元嬰大成——出師實戰(zhàn) 227
5.1 Redis 性能排查與解決問題的終極檢查清單 227
5.1.1 性能基線測量 227
5.1.2 慢命令監(jiān)控 229
5.1.3 解決性能問題的終極檢查清單 230
5.2 Redis 很強,不懂使用規(guī)范就糟蹋了 237
5.2.1 key-value使用規(guī)范 237
5.2.2 命令使用規(guī)范 239
5.2.3 數(shù)據(jù)存儲使用規(guī)范 240
5.2.4 SDK使用規(guī)范 240
5.2.5 運維規(guī)范 241
5.3 Redis 內(nèi)存優(yōu)化必殺技,小內(nèi)存存儲大數(shù)據(jù) 241
5.3.1 key-value優(yōu)化 242
5.3.2 小數(shù)據(jù)集合編碼優(yōu)化 243
5.3.3 使用對象共享池 244
5.3.4 使用bit或byte級別操作 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 高級配置 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ù)庫一致性問題深度剖析 280
5.6.1 緩存策略 281
5.6.2 緩存與數(shù)據(jù)庫一致性是什么 287
5.6.3 旁路緩存的問題分析 287
5.6.4 數(shù)據(jù)庫與緩存一致性解決方案 293
5.6.5 總結(jié) 295
5.7 Redis 分布式鎖演進原理與實戰(zhàn) 296
5.7.1 為什么需要分布式鎖 296
5.7.2 入門級分布式鎖 297
5.7.3 釋放別人的鎖 299
5.7.4 可重入鎖 300
5.7.5 正確配置鎖過期時間 303
5.7.6 Redis 部署方式對鎖的影響 307
5.7.7 紅鎖 307
5.7.8 紅鎖的是與非 308