Redis 深度歷險:核心原理與應用實踐

錢文品

  • 出版商: 電子工業出版社
  • 出版日期: 2018-12-01
  • 售價: $474
  • 貴賓價: 9.5$450
  • 語言: 簡體中文
  • 頁數: 248
  • 裝訂: 其他
  • ISBN: 7121350475
  • ISBN-13: 9787121350474
  • 相關分類: Key-Value Store

立即出貨

買這商品的人也買了...

相關主題

商品描述

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