新書介紹 -- 《Redis核心原理與實踐》

binecy發表於2021-08-29

大家好,今天給大家介紹一下我的新書 —— 《Redis核心原理與實踐》
後端開發的同學應該對Redis都不陌生,Redis由於效能極高、功能強大,已成為業界非常流行的記憶體資料庫。

《Redis核心原理與實踐》這本書深入地分析了Redis常用特性的內部機制與實現方式,大部分內容源自對Redis原始碼的分析,並從中總結出實現原理。通過閱讀本書,讀者可以快速、輕鬆地瞭解Redis的內部執行機制。

為什麼寫這本書?

我一直希望從原始碼層面深入分析一個C語言實現的分散式系統程式。原因如下:
(1)C語言可以說是最接近低階語言的開發語言,分析C語言程式,可以讓我們更深入理解作業系統底層知識。
(2)隨著網際網路行業發展,對後端系統高可用,高效能的要求越來越高,分散式系統也越來越流行。分析一個分散式系統的設計與實現,對我們的工作、學習都有很大幫助。

於是,我便閱讀學習了Redis原始碼,並編寫了《Redis核心原理與實踐》這本書。
為什麼選擇Redis呢?因為Redis是一個典型的“小而美”的程式。
Redis實現簡單,原始碼非常優雅簡潔,閱讀起來並不吃力,而且Redis功能齊全,涵蓋了資料儲存,分散式,訊息流等眾多特性,非常值得深入學習。
通過寫作這本書,我對Redis,Unix程式設計,分散式系統、儲存系統都有了更進一層的理解,再學習其他相關的系統(如Mysql、Nginx,Kafka),也可以舉一反三,觸類旁通。希望這本書也可以幫助讀者百尺竿頭,更進一步。

本書結構

第一部分主要分析了Redis中字串、雜湊、列表、集合,有序集合這五種資料型別的編碼格式。
編碼格式,即資料的儲存格式,對於資料庫,資料的儲存格式至關重要,如關係型資料庫的行式儲存和列式儲存。而Redis作為記憶體資料庫,對於資料編碼的總體設計思想是:最大限度的“以時間換空間”,從而最大限度地節省記憶體。
這一部分內容詳細分析了Redis對記憶體的使用如何達到“錙銖必較”的程度。

第二部分分析了Redis的核心流程,包括Redis事件機制與命令執行過程。
Redis利用IO複用模型,實現了自己的事件迴圈機制,而Redis正在由該事件機制驅動執行(很多遠端服務程式都是使用類似的架構,如Nginx,Mysql等)。
Redis事件機制設計優雅,實現簡單,並且效能卓越,可以說是“化繁為簡”。

第三部分分析了Redis持久化與複製機制。雖然Redis是記憶體資料庫,但仍然最大限度保證的資料的可靠性。
不管是檔案持久化,還是從節點複製,核心思想都是一樣的,通過將資料複製到多個副本中,從而保持資料安全。
這部分內容分析了RDB、AOF持久化機制,主從節點複製流程等內容,向讀者展示了Redis資料是如何“不脛而走”的。

第四部分分析了Redis分散式架構。這部分內容從流行的分散式演算法Raft演算法出發,分析Sentient如何監控節點,Cluster叢集如何實現資料分片,支援動態新增、刪除叢集節點,以及它們的“拿手好戲"——故障轉移。
分散式系統常常讓我聯想到一個有趣的詞,鐵索連舟(將叢集節點想象為”舟“,節點之間的網路連線想象為”索“)。

第五部分分析了Redis中的高階特性,包括Redis事務、非阻塞刪除、ACL許可權控制列表、Tracking機制、Lua指令碼、Module模組、Stream訊息流等內容,並且提供了詳細的使用案例,幫助讀者循序漸進,由淺到深地進行學習理解。
Redis為各種高效能,高可用場景提供了非常全面的支援,可以說是”包羅永珍“。

本書特點

本書深入分析Redis實現原理,並不是Redis入門書。為了儘量降低本書閱讀難度,本書總結了Redis各核心功能的實現機制,提取Redis核心程式碼(本書會盡量避免堆積程式碼),並以適量圖文,對Redis原始碼以及實現原理進行詳細分析,向讀者展示Redis核心功能的設計思想,實現流程。
本書雖然大部分內容基於Redis原始碼分析,但是並不複雜,即使你只是簡單瞭解C語言的基礎語法,也可以輕鬆讀懂。

推薦理由

  • 新版本:基於Redis 6.0.9,並分析了Redis新特性,如Redis 6的ACL、Tracking、IO執行緒等機制。
  • 重實踐:本書在對應知識點的基礎上提供了詳細的應用示例,幫助讀者由淺到深地學習和理解Redis新特性。
  • 易掌握:本書總結了Redis各個核心功能的實現原理,並以適量圖文、豐富示例,對Redis原始碼及其實現原理進行詳細分析,循序漸進地向讀者展示Redis核心功能的設計思想和實現流程。讀者也可以結合本書,自行閱讀Redis原始碼。
  • 內容豐富:本書不僅分析了Redis的功能,還由Redis原始碼延展瞭如下兩方面內容:
    (1)詳細介紹Redis中使用到的Unix機制,包括Unix網路程式設計、程式(執行緒)的應用等內容,並通過原始碼展示Redis如何使用這些Unix機制。
    (2)深入分析Redis如何實現一個分散式系統,主要是Sentinel、Cluster機制如何實現一個高可用的分散式系統。

由於我能力有限,書中難免有遺漏或錯誤,若您在閱讀本書的過程中有任何問題或者建議,歡迎大家溝通交流。我會對您提出的問題、建議進行梳理與反饋,並在本書後續版本中及時做出勘誤與更新。

經過本書編輯同意,我後續會在個人技術公眾號(binecy)釋出書中部分章節內容,作為書的預覽內容,歡迎大家查閱,謝謝。

京東連結
豆瓣連結

相關文章