TOP
0
0
【23號簡體館日】限時三天領券享優惠!!
Redis 深度歷險:核心原理與應用實踐(簡體書)
滿額折

Redis 深度歷險:核心原理與應用實踐(簡體書)

人民幣定價:79 元
定  價:NT$ 474 元
優惠價:87412
領券後再享88折
海外經銷商無庫存,到貨日平均30天至45天
可得紅利積點:12 點
相關商品
商品簡介
作者簡介
目次

商品簡介

Redis 是互聯網技術領域使用最為廣泛的存儲中間件,以其超高的性能、完美的文檔、簡潔易懂的源碼和豐富的客戶端庫支持在開源中間件領域廣受好評。國內外很多大型互聯網公司都在使用 Redis,比如 Twitter、暴雪娛樂、Github、StackOverflow、騰訊、阿裡、京東、華為、新浪微博等,很多中小型公司也都有應用。也可以說,對 Redis 的瞭解和應用實踐已成為當下中高級後端開發者繞不開的必備技能。本書在內容結構上分為 Redis 基礎應用、原理、集群、拓展學習和源碼分析 5大塊。 Redis 基礎應用:佔據篇幅最長,這也是對讀者最有價值的內容,可以直接應用到實際工作中。 原理和集群版塊:適合對技術有著極致追求的開發者,他們希望透過簡單的技術表面看到精緻的底層世界。 拓展學習版塊:作為最核心內容之外的補充部分,主要用於進一步擴展技術視野或者夯實基礎,便於進階學習,作者會盡可能的在拓展篇持續擴充更多知識點。 源碼分析版塊:主要滿足高階用戶深入探索 Redis 內部實現的強烈渴望,這類讀者堅信讀懂源碼才是技術實力的真正體現。

作者簡介

錢文品(老錢)
互聯網分布式高併發技術領域奮戰十年的老兵,目前擔任掌閱服務端技術專家。
熟練使用 Java、Python、Golang 等多種計算機語言,是開源項目愛好者。
開發過多人在線 RPG 遊戲,製作過大型網站,寫過消息推送系統和 MySQL 中間件。
運營公眾號“碼洞”(codehole)。

前 言
攀登技術之山
為什麼我要嘗試寫作技術類書籍
我畢業至今已經十年了。這十年的技術生涯猶如艱辛的登山過程,中間雖有停停歇歇,但整體而言,我始終在向上努力攀登。
我是個對新技術有著強烈好奇心的人,曾經學習了很多種計算機語言,有些語言與我的工作並沒有太大關係,但這不妨礙我花費時間去鑽研它們。相比身邊很多技術高手,我本人並不算一個特別有天賦的人,所以爬山的過程比較緩慢。
2018年年中,我偶然回顧了一下自己的技術生涯,感覺總算有所小成,登山達到了一定高度,但與此同時,我也意識到技術日新月異,頂峰遙不可及,總會有我爬不動的那一天,那麼在此之前我能做些什麼呢?
閒暇之時,我開始嘗試寫作技術類書籍,希望將自己多年來的所學所想記錄下來,分享給山下的學弟學妹們,希望他們閱讀之後,可以在登山時輕鬆一些。等到他們未來達到我所處的高度時,也能偶而記起我這樣一個前輩曾經寫過一點東西對他們有過些許幫助。
我必須承認,我的語文水平不算好,寫作對我來說是一個挑戰。不過當我開始著手嘗試時,卻發現自己有一種停不下來的感覺。
我發現寫作技術類書籍這件事特別適合我,一方面這類書並不需要華麗的辭藻以及別出心裁的情節設計,因為寫出簡明易懂的內容才是最重要的,另一方面我很清楚普通人在面對一門新技術時所遇到的難點在哪裡,門檻在哪裡,因為登山時遇到的艱難我都心中有數。
技術大神們可能會覺得那些“難點”都特別簡單,他們很難站在普通人的角度思考問題,對於讀者的抱怨會覺得難以理解。我時常翻閱一些國外的技術博客,發現這些大神寫的文章其實並不易懂,一篇文章往往要仔細地閱讀好多遍才能大致理解。如果讀者希望更輕鬆地理解他們所寫的內容,就太需要我們這些願意寫作技術類書籍的人。我們將來自山頂的晦澀的知識抽絲剝繭,讓它們變得易於理解,讓更多人可以享受到來自山頂的陽光。
人們常說,一個人年輕時經歷的艱難會在未來成為他的財富,我想這大概就是我能完成這本書的原因。
為什麼我要寫 Redis
Redis 是互聯網技術架構在存儲系統中使用得最為廣泛的中間件,它也是中高級後端工程師技術面試中面試官最喜歡問的工程技能之一,特別是那些優秀的、競爭激烈的大型互聯網公司(比如 Twitter、新浪微博、阿裡雲、騰訊雲、淘寶、知乎等),通常要求面試者不僅僅掌握 Redis 基礎使用方法,更要求深層理解 Redis 內部實現的細節原理。毫不誇張地說,只要能把 Redis 的知識點全部吃透,你的半隻腳就已經踏進心儀公司的技術研發部了。
但我在以往的很多面試中,發現大多數同學只會拿 Redis 做數據緩存,使用最簡單的 get/set 方法,除此之外幾乎一無所知。也有小部分同學知道 Redis 的分布式鎖,但也不清楚其內部實現機制,甚至在使用上就不標準,導致生產環境中出現意想不到的問題。還有很多同學沒認識到 Redis 是個單線程結構,也不理解單線程的 Redis為何還可以支持高併發。
我希望通過梳理和總結自己的實踐經驗,能夠幫助更多後端開發者更快、更深入地掌握 Redis 技能。這就是我寫作本書的初衷。
我所在的掌閱科技公司,為了支撐海量(億級)的用戶服務,使用了上千個Redis 實例,如圖 0-1 所示,包含大約 100 個 Redis 集群(Codis)以及很多獨立的Redis 節點,因此我在使用 Redis 作為緩存和持久存儲中間件上積累了較為豐富的實戰經驗,這些我都將毫無保留地分享到本書中。
Redis 涉及到的知識點是非常多的,本書將講解其中最常見的 Redis 核心原理和應用實踐經驗,讓讀者在閱讀之後可以將知識快速應用到平時的 Redis 項目開發中。
除此之外,本書還會深入探究一些底層的至關重要的計算機科學基礎原理,以及技術應用的思考方式,這些基礎的知識和技能將最終決定你的技術人生道路可以走多快、走多遠。

本書內容結構
本書分為基礎和應用篇、原理篇、集群篇、拓展篇、源碼篇共 5 大塊內容。
基礎和應用篇:佔據篇幅最長,這也是對讀者最有價值的內容,可以直接應用到實際工作中。
原理篇和集群篇:適合對技術有著極致追求的開發者學習,他們希望透過簡單的技術表面看到精緻的底層世界。
拓展篇:作為最核心內容的補充部分,幫助讀者進一步拓展技術視野或者夯實基礎,便於進階學習。
源碼篇:滿足高階用戶深入探索 Redis 內部實現原理的強烈需要,這類讀者堅信讀懂源碼才是技術實力的真正體現。
圖文並茂是本書一大特色
為了便於讀者理解本書內容,我花費了不少時間繪製了大量原創彩色插圖。希望這些彩圖能夠幫助讀者更有效率地理解本書知識點,實現事半功倍的效果。
適合閱讀本書的讀者
本書適合以下類型的讀者閱讀。
1. 有 Redis 基礎,渴望深度掌握 Redis 技術原理的中高級後端開發者。
2. 渴望成功進入大型互聯網企業研發部的中高級後端開發者。
3. 需要支撐公司 Redis 中間件運維工作的初中級運維工程師。
4. 希望更好地設計 Redis 面試題目的後端技術面試官。
5. 對 Redis 中間件技術好奇的中高級前端技術朋友們。
老錢
2018 年10 月

目次

目錄
第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 指令安全 / 17

您曾經瀏覽過的商品

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 412
海外經銷商無庫存,到貨日平均30天至45天

暢銷榜

客服中心

收藏

會員專區