
陳雷等
優質的菜品需要有技藝精湛的廚師來烹飪,本書就像以優質菜品做成的“大菜”。整本書沒有太多囉唆的語言,直接抽絲剝繭:從基本的數據結構類型,Redis內部每個操作命令的底層代碼運行邏輯和結構,一直到整個Redis持久化技術、主從技術、分佈式集羣技術等,都有深入源碼級別的講解,讓你領略從數據結構到整個高性能服務的全部設計之美。學以致用,讀者朋友通過領會與實踐來提升技術,成爲一個高性能網絡服務開發高手,繼而深入理解緩存服務,設計自己的高性能緩存服務系統或者緩存數據庫系統,應用到自己業務中去,豈非快哉!在整本書裏,我也看到了一羣程序員的認真執着,把每個業務數據流程圖、關鍵代碼、數據結構圖都規劃得詳細、清晰,把自己對技術的各種理解融入書中。本書脈絡清晰,適合剛入行的後端程序員、高性能服務開發者、系統運維人員、技術架構師等閱讀。希望閱讀本書的技術同仁都能夠得到進步和提高。
本書是一本瞭解redis源碼的書,詳細講解了redis基本數據結構到各個命令的源碼及對應的代碼分析,在五中value類型的基礎上redis5增加了stream數據流的操作;就像作者所說文中基本涵蓋了數據結構的所有,瞭解redis底層之後對數據結構會很大幫助,不過由於文中涉及過多算法及數據結構的知識,讀起來相對比較費勁;redis的持久化處理機制RDB(從緩存中讀取數據刷新到磁盤中)記錄的是當前時間點的數據,AOF(以日誌追加的形式保存到文件中)記錄的服務器端所有操作指令,實際運用是以RDB&AOF組合的方式。redis集羣、哨兵模式、主從複製都有原理說明及代碼分析。是一本瞭解redis底層的好書。
受益匪淺,對數據結構,操作流程,主從切換,集羣特性進行的講解。很適合重複學習
前面對Redis基本數據類型、命令的使用講解簡單,易理解。 但對哨兵、集羣講解過於簡單,晦澀難懂。 需要有一定基本功並結合源碼自行理解和深耕。
精彩,建議小夥伴從command部分閱讀,源碼部分量力而行,當然,這裏的樂趣,真的比command的介紹要精彩太多太多
本書讚譽 序 前言 第1章 引言1 1.1 Redis簡介1 1.2 Redis 5.0的新特性2 1.3 Redis源碼概述3 1.4 Redis安裝與調試4 1.5 本章小結6 第2章 簡單動態字符串7 2.1 數據結構7 2.2 基本操作11 2.2.1 創建字符串11 2.2.2 釋放字符串12 2.2.3 拼接字符串12 2.2.4 其餘API15 2.3 本章小結15 第3章 跳躍表17 3.1 簡介17 3.2 跳躍表節點與結構19 3.2.1 跳躍表節點19 3.2.2 跳躍表結構20 3.3 基本操作20 3.3.1 創建跳躍表21 3.3.2 插入節點22 3.3.3 刪除節點28 3.3.4 刪除跳躍表30 3.4 跳躍表的應用31 3.5 本章小結32 第4章 壓縮列表33 4.1 壓縮列表的存儲結構33 4.2 結構體35 4.3 基本操作37 4.3.1 創建壓縮列表37 4.3.2 插入元素38 4.3.3 刪除元素42 4.3.4 遍歷壓縮列表44 4.4 連鎖更新44 4.5 本章小結45 第5章 字典47 5.1 基本概念47 5.1.1 數組48 5.1.2 Hash函數49 5.1.3 Hash衝突51 5.2 Redis字典的實現52 5.3 基本操作55 5.3.1 字典初始化55 5.3.2 添加元素56 5.3.3 查找元素60 5.3.4 修改元素61 5.3.5 刪除元素61 5.4 字典的遍歷62 5.4.1 迭代器遍歷62 5.4.2 間斷遍歷65 5.5 API列表70 5.6 本章小結71 第6章 整數集合72 6.1 數據存儲72 6.2 基本操作75 6.2.1 查詢元素75 6.2.2 添加元素78 6.2.3 刪除元素82 6.2.4 常用API83 6.3 本章小結85 第7章 quicklist的實現86 7.1 quicklist簡介86 7.2 數據存儲87 7.3 數據壓縮91 7.3.1 壓縮92 7.3.2 解壓縮93 7.4 基本操作94 7.4.1 初始化94 7.4.2 添加元素95 7.4.3 刪除元素96 7.4.4 更改元素98 7.4.5 查找元素99 7.4.6 常用API100 7.5 本章小結101 第8章 Stream102 8.1 Stream簡介102 8.1.1 Stream底層結構listpack103 8.1.2 Stream底層結構Rax簡介104 8.1.3 Stream結構108 8.2 Stream底層結構listpack的實現112 8.2.1 初始化112 8.2.2 增刪改操作112 8.2.3 遍歷操作113 8.2.4 讀取元素113 8.3 Stream底層結構Rax的實現114 8.3.1 初始化114 8.3.2 查找元素114 8.3.3 添加元素116 8.3.4 刪除元素118 8.3.5 遍歷元素120 8.4 Stream結構的實現123 8.4.1 初始化124 8.4.2 添加元素124 8.4.3 刪除元素125 8.4.4 查找元素128 8.4.5 遍歷129 8.5 本章小結131 第9章 命令處理生命週期132 9.1 基本知識132 9.1.1 對象結構體robj132 9.1.2 客戶端結構體client136 9.1.3 服務端結構體redisServer138 9.1.4 命令結構體redisCommand139 9.1.5 事件處理141 9.2 server啓動過程149 9.2.1 server初始化149 9.2.2 啓動監聽152 9.3 命令處理過程155 9.3.1 命令解析156 9.3.2 命令調用159 9.3.3 返回結果161 9.4 本章小結163 第10章 鍵相關命令的實現164 10.1 對象結構體和數據庫結構體回顧164 10.1.1 對象結構體redisObject164 10.1.2 數據庫結構體redisDb166 10.2 查看鍵信息166 10.2.1 查看鍵屬性166 10.2.2 查看鍵類型169 10.2.3 查看鍵過期時間170 10.3 設置鍵信息171 10.3.1 設置鍵過期時間171 10.3.2 刪除鍵過期時間172 10.3.3 重命名鍵173 10.3.4 修改鍵最後訪問173 10.4 查找鍵174 10.4.1 判斷鍵是否存在174 10.4.2 查找符合模式的鍵175 10.4.3 遍歷鍵176 10.4.4 隨機取鍵177 10.5 操作鍵178 10.5.1 刪除鍵178 10.5.2 序列化/反序列化鍵182 10.5.3 移動鍵183 10.5.4 鍵排序185 10.6 本章小結187 第11章 字符串相關命令的實現188 11.1 相關命令介紹188 11.2 設置字符串189 11.2.1 set命令189 11.2.2 mset命令195 11.3 修改字符串196 11.3.1 append命令196 11.3.2 setrange命令197 11.3.3 計數器命令197 11.4 字符串獲取199 11.4.1 get命令199 11.4.2 getset命令199 11.4.3 getrange命令199 11.4.4 strlen命令200 11.4.5 mget命令201 11.5 字符串位操作201 11.5.1 setbit命令201 11.5.2 getbit命令203 11.5.3 bitpos命令203 11.5.4 bitcount命令205 11.5.5 bitop命令208 11.5.6 bitfield命令209 11.6 本章小結212 第12章 散列表相關命令的實現213 12.1 簡介213 12.1.1 底層存儲213 12.1.2 底層存儲轉換215 12.1.3 接口說明215 12.2 設置命令216 12.3 讀取命令217 12.3.1 hexists命令218 12.3.2 hget/hmget命令218 12.3.3 hkeys/hvals/hgetall命令219 12.3.4 hlen命令220 12.3.5 hscan命令220 12.4 刪除命令221 12.5 自增命令222 12.6 本章小結224 第13章 列表相關命令的實現225 13.1 相關命令介紹225 13.1.1 命令列表225 13.1.2 棧和隊列命令列表226 13.2 push/pop相關命令228 13.2.1 push類命令的實現228 13.2.2 pop類命令的實現229 13.2.3 阻塞push/pop類命令的實現230 13.3 獲取列表數據234 13.3.1 獲取單個元素234 13.3.2 獲取多個元素235 13.3.3 獲取列表長度236 13.4 操作列表236 13.4.1 設置元素237 13.4.2 插入元素237 13.4.3 刪除元素238 13.4.4 裁剪列表239 13.5 本章小結240 第14章 集合相關命令的實現241 14.1 相關命令介紹241 14.2 集合運算254 14.2.1 交集254 14.2.2 並集258 14.2.3 差集260 14.3 本章小結263 第15章 有序集合相關命令的實現264 15.1 相關命令介紹264 15.2 基本操作272 15.2.1 添加成員272 15.2.2 刪除成員275 15.2.3 基數統計276 15.2.4 數量計算277 15.2.5 計數器279 15.2.6 獲取排名279 15.2.7 獲取分值279 15.2.8 遍歷280 15.3 批量操作280 15.3.1 範圍查找280 15.3.2 範圍刪除283 15.4 集合運算284 15.5 本章小結284 第16章 GEO相關命令285 16.1 基礎知識285 16.2 命令實現288 16.2.1 使用geoadd添加座標288 16.2.2 計算座標的geohash291 16.2.3 使用geopos查詢位置經緯度292 16.2.4 使用geodist計算兩點距離295 16.2.5 使用georadius/georadius-bymembe查詢範圍內元素295 16.3 本章小結297 第17章 HyperLogLog相關命令的實現298 17.1 基本原理298 17.1.1 算法演進299 17.1.2 線性計數算法299 17.1.3 對數計數算法300 17.1.4 自適應計數算法302 17.1.5 超對數計數算法302 17.2 HLL Redis實現302 17.2.1 HLL頭對象303 17.2.2 稀疏編碼304 17.2.3 密集編碼306 17.2.4 內部編碼308 17.2.5 編碼轉換309 17.3 命令實現310 17.3.1 添加基數310 17.3.2 近似基數311 17.3.3 合併基數313 17.4 本章小結314 第18章 數據流相關命令的實現315 18.1 相關命令介紹315 18.2 基本操作命令原理分析323 18.2.1 添加消息323 18.2.2 刪除消息325 18.2.3 範圍查找326 18.2.4 獲取隊列信息327 18.2.5 長度統計327 18.2.6 剪切消息328 18.3 分組命令原理分析328 18.3.1 分組管理328 18.3.2 消費消息330 18.3.3 響應消息331 18.3.4 獲取未響應消息列表331 18.3.5 修改指定未響應消息歸屬331 18.4 本章小結332 第19章 其他命令333 19.1 事務333 19.1.1 事務簡介333 19.1.2 事務命令實現334 19.2 發佈-訂閱命令實現339 19.3 Lua腳本345 19.3.1 初始化Lua環境345 19.3.2 在Lua中調用Redis命令347 19.3.3 Redis和Lua數據類型轉換349 19.3.4 命令實現351 19.4 本章小結356 第20章 持久化357 20.1 RDB358 20.1.1 RDB執行流程358 20.1.2 RDB文件結構359 20.2 AOF367 20.2.1 AOF執行流程368 20.2.2 AOF重寫369 20.3 RDB與AOF相關配置指令372 20.4 本章小結374 第21章 主從複製375 21.1 主從複製功能實現375 21.2 主從複製源碼基礎378 21.3 slaver源碼分析382 21.4 master源碼分析388 21.5 本章小結391 第22章 哨兵和集羣392 22.1 哨兵392 22.1.1 哨兵簡介393 22.1.2 代碼流程394 22.1.3 主從切換396 22.1.4 常用命令399 22.2 集羣400 22.2.1 集羣簡介401 22.2.2 代碼流程402 22.2.3 主從切換404 22.2.4 副本漂移406 22.2.5 分片遷移407 22.2.6 通信數據包類型409 22.3 本章小結415
多名專家聯袂推薦,資深專家聯合撰寫,深入理解Redis 5設計精髓。本書系統講解Redis 5設計、數據結構、底層命令實現,以及持久化、主從複製、集羣的實現。
深入研究redis的原理和機制相對比較全面,就是代碼貼的太多了,結合實際場景上下文更加,但對於架構師級別或者資深開發來說不是問題,反而乾貨很多。
想研究源碼的話,看源碼的同時搭配這本書體驗會更好點,介紹比較清晰,而且跟最新的版本差別沒那麼大。 拋開源碼,如果想深入瞭解 Redis 的基本數據結構,書中的介紹也很詳細。如果看過《Redis 設計與實現》,那麼會發現本書是一個很好的補充。更智能的 SDS、新增的 Stream 類型、HyperLogLog、GEOHASH 等等,總有一個能吸引你。 最好是帶着目的去閱讀,不然讀着會很喫力。
全文將的真的很到位,由淺入深,不僅僅分析源碼,更是分析了源碼實現的過程和思想。總之,很值得去讀的一本書,學習到的不僅僅是redis,還是數據結構+算法的書
介紹一般,介紹用法多於源碼解析。貼代碼過多,對於一些redis的設計思路卻一筆帶過。