Redis 深度歷險:核心原理與應用實踐
錢文品
- 出版商: 電子工業
- 出版日期: 2018-12-01
- 定價: $474
- 售價: 8.5 折 $403
- 語言: 簡體中文
- 頁數: 248
- 裝訂: 其他
- ISBN: 7121350475
- ISBN-13: 9787121350474
-
相關分類:
Key-Value Store
無法訂購
買這商品的人也買了...
-
$414$393 -
$354$336 -
$790$616 -
$454深入理解 Redis
-
$450$356 -
$265Web API 的設計與開發 (Web API : the Good Parts)
-
$356精益產品開發:原則、方法與實施
-
$580$493 -
$403MySQL 王者晉級之路
-
$594$564 -
$245Kubernetes 經典實例
-
$354$336 -
$420$332 -
$454Elasticsearch 源碼解析與優化實戰
-
$250分佈式緩存 原理、架構及 Go 語言實現
-
$450$356 -
$454持續交付 2.0 業務引領的 DevOps 精要
-
$480$379 -
$580$493 -
$857Kubernetes 權威指南:從 Docker 到 Kubernetes 實踐全接觸, 4/e
-
$454持續集成與持續部署實踐
-
$380$300 -
$714$678 -
$680$530 -
$650$553
相關主題
商品描述
Redis 是互聯網技術領域使用最為廣泛的存儲中間件,以其超高的性能、完美的文檔、簡潔易懂的源碼和豐富的客戶端庫支持在開源中間件領域廣受好評。國內外很多大型互聯網公司都在使用 Redis,比如 Twitter、暴雪娛樂、Github、StackOverflow、騰訊、阿裡、京東、華為、新浪微博等,很多中小型公司也都有應用。也可以說,對 Redis 的瞭解和應用實踐已成為當下中高級後端開發者繞不開的必備技能。本書在內容結構上分為 Redis 基礎應用、原理、集群、拓展學習和源碼分析 5大塊。 Redis 基礎應用:占據篇幅最長,這也是對讀者最有價值的內容,可以直接應用到實際工作中。 原理和集群版塊:適合對技術有著極致追求的開發者,他們希望透過簡單的技術錶面看到精緻的底層世界。 拓展學習版塊:作為最核心內容之外的補充部分,主要用於進一步擴展技術視野或者夯實基礎,便於進階學習,作者會盡可能的在拓展篇持續擴充更多知識點。 源碼分析版塊:主要滿足高階用戶深入探索 Redis 內部實現的強烈渴望,這類讀者堅信讀懂源碼才是技術實力的真正體現。
作者簡介
掌閱科技股份有限公司服務端技術專家;互聯網分佈式高並發技術十年老兵,熟練使用Java、Python、Golang 等多種計算機語言,開發過遊戲,製作過網站,寫過消息推送系統和MySQL 中間件,實現過開源的ORM 框架、Web 框架、RPC 框架等。自媒體公眾號"碼洞”運營者。
目錄大綱
目錄
第1篇基礎和應用篇/ 1
1.1授人以魚不如授人以漁/ 1
1.1.1由Redis面試想到的/ 1
1.1.2本書的內容範圍/ 2
1.1.3 Redis可以做什麼/ 3
1.1.4小結/ 3
1.1.5擴展閱讀/ 4
1.2萬丈高樓平地起——Redis基礎數據結構/ 4
1.2.1 Redis的安裝/ 5
1.2.2 5種基礎數據結構/ 6
1.2.3容器型數據結構的通用規則/ 17
1.2.4過期時間/ 17
1.2.5思考&作業/ 17
1.3千帆競發——分佈式鎖/ 18
1.3.1分佈式鎖的奧義/ 18
1.3.2超時問題/ 20
1.3.3可重入性/ 21
1.3.4思考&作業/ 24
1.4緩兵之計——延時隊列/ 24
1.4.1異步消息隊列/ 24
1.4.2隊列空了怎麼辦/ 26
1.4.3阻塞讀/ 26
1.4.4空閒連接自動斷開/ 26
1.4.5鎖衝突處理/ 27
1.4.6延時隊列的實現/ 27
1.4.7進一步優化/ 30
1.4.8思考&作業/ 31
1.5節衣縮食——位圖/ 31
1.5.1基本用法/ 31
1.5.2統計和查找/ 34
1.5.3魔術指令bitfield / 35
1.5.4思考&作業/ 38
1.6四兩撥千斤——HyperLogLog / 38
1.6.1使用方法/ 39
1.6.2 pfadd中的pf是什麼意思/ 41
1.6.3 pfmerge適合的場合/ 42
1.6.4注意事項/ 42
1.6.5 HyperLogLog實現原理/ 42
1.6.6 pf的內存佔用為什麼是12KB / 49
1.6.7思考&作業/ 50
1.7層巒疊嶂——布隆過濾器/ 50
1.7.1布隆過濾器是什麼/ 51
1.7.2 Redis中的布隆過濾器/ 51
1.7.3布隆過濾器的基本用法/ 52
1.7.4注意事項/ 59
1.7.5布隆過濾器的原理/ 60
1.7.6空間佔用估計/ 61
1.7.7實際元素超出時,誤判率會怎樣變化/ 62
1.7.8用不上Redis 4.0怎麼辦/ 63
1.7.9布隆過濾器的其他應用/ 63
1.8斷尾求生——簡單限流/ 64
1.8.1如何使用Redis來實現簡單限流策略/ 64
1.8.2解決方案/ 65
1.8.3小結/ 67
1.9一毛不拔——漏斗限流/ 68
1.9.1 Redis-Cell / 71
1.9.2思考&作業/ 72
1.9.3擴展閱讀:Redis-Cell作者介紹/ 72
1.10近水樓台——GeoHash / 73
1.10.1用數據庫來算附近的人/ 73
1.10.2 GeoHash算法/ 74
1.10.3 Geo指令的基本用法/ 75
1.10.4注意事項/ 78
1.11大海撈針——scan / 79
1.11.1 scan基本用法/ 80
1.11.2字典的結構/ 82
1.11.3 scan遍歷順序/ 82
1.11.4字典擴容/ 83
1.11.5對比擴容、縮容前後的遍歷順序/ 84
1.11.6漸進式rehash / 85
1.11.7更多的scan指令/ 85
1.11.8大key掃描/ 85
第2篇原理篇/ 87
2.1鞭辟入裡——線程IO模型/ 87
2.1.1非阻塞IO / 87
2.1.2事件輪詢(多路復用) / 88
2.1.3指令隊列/ 90
2.1.4響應隊列/ 90
2.1.5定時任務/ 90
2.1.6擴展閱讀/ 90
2.2交頭接耳——通信協議/ 90
2.2.1 RESP / 91
2.2.2客戶端→服務器/ 92
2.2.3服務器→客戶端/ 92
2.2.4小結/ 95
2.2.5擴展閱讀/ 95
2.3未雨綢繆——持久化/ 95
2.3.1快照原理/ 96
2.3.2 fork(多進程) / 96
2.3.3 AOF原理/ 97
2.3.4 AOF重寫/ 98
2.3 .5 fsync / 98
2.3.6運維/ 98
2.3.7 Redis 4.0混合持久化/ 99
2.3.8思考&作業/ 100
2.4雷厲風行——管道/ 100
2.4.1 Redis的消息交互/ 100
2.4.2管道壓力測試/ 101
2.4.3深入理解管道本質/ 102
2.4.4小結/ 104
2.5同舟共濟——事務/ 104
2.5.1 Redis事務的基本用法/ 104
2.5.2原子性/ 105
2.5.3 discard(丟棄) / 106
2.5.4優化/ 106
2.5.5 watch / 107
2.5.6注意事項/ 108
2.5.7思考&作業/ 110
2.6小道消息——PubSub / 110
2.6.1消息多播/ 110
2.6.2 PubSub / 111
2.6.3模式訂閱/ 113
2.6.4消息結構/ 114
2.6.5 PubSub的缺點/ 115
2.6.6補充/ 115
2.7開源節流——小對象壓縮/ 115
2.7.1 32bit VS 64bit / 116
2.7.2小對象壓縮存儲(ziplist) / 116
2.7.3內存回收機制/ 120
2.7.4內存分配算法/ 120
第3篇集群篇/ 122
3.1有備無患——主從同步/ 122
3.1.1 CAP原理/ 122
3.1.2最終一致/ 123
3.1.3主從同步與從從同步/ 123
3.1.4增量同步/ 124
3.1.5快照同步/ 124
3.1.6增加從節點/ 125
3.1.7無盤複製/ 125
3.1.8 wait指令/ 125
3.1.9小結/ 126
3.2李代桃僵— —Sentinel / 126
3.2.1消息丟失/ 128
3.2.2 Sentinel基本用法/ 128
3.2.3思考&作業/ 129
3.3分而治之——Codis / 130
3.3.1 Codis分片原理/ 131
3.3.2不同的Codis實例之間槽位關係如何同步/ 132
3.3. 3擴容/ 132
3.3.4自動均衡/ 133
3.3.5 Codis的代價/ 133
3.3.6 Codis的優點/ 134
3.3.7 mget指令的操作過程/ 134
3.3.8架構變遷/ 135
3.3.9 Codis的尷尬/ 135
3.3.10 Codis的後台管理/ 136
3.3.11思考&作業/ 136
3.4眾志成城——Cluster / 137
3.4.1槽位定位算法/ 138
3.4.2跳轉/ 138
3.4.3遷移/ 138
3.4. 4容錯/ 140
3.4.5網絡抖動/ 140
3.4.6可能下線(PFAIL)與確定下線(Fail) / 141
3.4.7 Cluster基本用法/ 141
3.4.8槽位遷移感知/ 142
3.4.9集群變更感知/ 143
3.4.10思考&作業/ 143
第4篇拓展篇/ 144
4.1耳聽八方——Stream / 144
4.1.1消息ID / 145
4.1.2消息內容/ 145
4.1.3增刪改查/ 145
4.1.4獨立消費/ 147
4.1.5創建消費組/ 148
4.1.6消費/ 150
4.1.7 Stream消息太多怎麼辦/ 152
4.1.8消息如果忘記ack會怎樣/ 153
4.1.9 PEL如何避免消息丟失/ 153
4.1.10 Stream的高可用/ 153
4.1.11分區Partition / 154
4.1.12小結/ 154
4.2無所不知——Info指令/ 154
4.2.1 Redis每秒執行多少次指令/ 155
4.2.2 Redis連接了多少客戶端/ 156
4.2.3 Redis內存佔用多大/ 156
4.2. 4複製積壓緩衝區多大/ 157
4.2.5思考&作業/ 158
4.3拾遺補漏——再談分佈式鎖/ 158
4.3.1 Redlock算法/ 158
4.3.2 Redlock使用場景/ 159
4.3.3擴展閱讀:redlock -py的作者/ 160
4.4朝生暮死——過期策略/ 160
4.4.1過期的key集合/ 160
4.4.2定時掃描策略/ 160
4.4.3從節點的過期策略/ 161
4.5優勝劣汰——LRU / 162
4.5.1 LRU算法/ 163
4.5.2近似LRU算法/ 164
4.5 .3思考&作業/ 165
4.6平波緩進——懶惰刪除/ 165
4.6.1 Redis為什麼使用懶惰刪除/ 165
4.6.2 flush / 166
4.6.3異步隊列/ 166
4.6.4 AOF Sync也很慢/ 166
4.6.5更多異步刪除點/ 166
4.7妙手仁心——優雅地使用Jedis / 167
4.7.1重試/ 171
4.7.2思考&作業/ 172
4.8居安思危——保護Redis / 172
4.8.1指令安全/ 172
4.8.2端口安全/ 173
4.8.3 Lua腳本安全/ 174
4.8.4 SSL代理/ 174
4.8.5小結/ 174
4.9隔牆有耳——Redis安全通信/ 175
4.9.1 spiped原理/ 176
4.9.2 spiped使用入門/ 176
4.9.3思考&作業/ 179
第5篇源碼篇/ 180
5.1絲分縷析——探索“字符串”內部/ 180
5.1.1 embstr VS raw / 181
5.1.2擴容策略/ 184
5.1.3思考&作業/ 184
5.2循序漸進——探索“字典”內部/ 184
5.2.1 dict內部結構/ 184
5.2.2漸進式rehash / 186
5.2.3查找過程/ 187
5.2.4 hash函數/ 188
5.2.5 hash攻擊/ 188
5.2.6擴容條件/ 188
5.2.7縮容條件/ 189
5.2.8 set的結構/ 189
5.2.9思考&作業/ 189
5.3挨肩迭背——探索“壓縮列表”內部/ 190
5.3.1增加元素/ 192
5.3.2級聯更新/ 192
5.3.3 intset小整數集合/ 194
5.3.4思考&作業/ 195
5.4風馳電掣——探索“快速列表”內部/ 195
5.4.1每個ziplist存多少元素/ 197
5.4.2壓縮深度/ 198
5.5凌波微步——探索“跳躍列表”內部/ 198
5.5.1基本結構/ 199
5.5.2查找過程/ 199
5.5.3隨機層數/ 200
5.5.4插入過程/ 201
5.5.5刪除過程/ 202
5.5.6更新過程/ 203
5.5.7如果score值都一樣呢/ 203
5.5.8元素排名是怎麼算出來的/ 203
5.5.9思考&作業/ 204
5.5.10題外話/ 204
5.6破舊立新——探索“緊湊列表”內部/ 205
5.6.1級聯更新/ 207
5.6.2取代ziplist尚需時日/ 207
5.6. 3思考&作業/ 207
5.7金枝玉葉——探索“基數樹”內部/ 207
5.7.1應用/ 208
5.7.2結構/ 210
5.7.3思考&作業/ 213
5.8精益求精——LFU VS LRU / 213
5.8.1 Redis對象的熱度/ 213
5.8.2 LRU模式/ 213
5.8.3 LFU模式/ 214
5.8.4為什麼Redis要緩存系統時間戳/ 217
5.8.5 Redis為什麼在獲取lruclock時使用原子操作/ 217
5.8.6如何打開LFU模式/ 218
5.8.7思考&作業/ 218
5.9如履薄冰——懶惰刪除的巨大犧牲/ 218
5.9.1懶惰刪除的最初實現不是異步線程/ 219
5.9.2異步線程方案其實也相當複雜/ 219
5.9.3異步刪除的實現/ 221
5.9.4隊列安全/ 224
5.9.5思考&作業/ 225
5.10跋山涉水——深入字典遍歷/ 225
5.10.1一邊遍歷一邊修改/ 226
5.10.2重複遍歷的難題/ 227
5.10.3迭代器的結構/ 227
5.10.4迭代過程/ 229
5.10.5迭代器的選擇/ 231
5.10.6思考&作業/ 232