物件的實現
底層資料結構介紹
資料庫實現
資料庫示例
持久化實現
命令處理模型
複習單機伺服器的內部構造及原理介 紹
redis 資料的構建方法
物件系統
redis 是乙個鍵值對(key-value pair)資料庫,資料庫中的每個鍵都有與之對應的值,並且這些鍵和值都是物件(object),其中:
舉個例子,執行命令 set msg 「hello world」 會讓資料庫關聯起乙個新的鍵值對,其中鍵是乙個包含內容 「msg」 的字串物件,而值則是乙個包含內容 「hello world」 的字串物件;
物件關係圖
redis 實現不同型別物件的方法
物件的實現
redis 中的每種物件都有與之相對應的底層資料結構,並且為了讓物件在各種不同的應用場景下都有優
秀的效能表現,redis 為每種物件都提供了兩種型別的資料結構實現:
在建立新物件時,redis 會優先使用編碼資料結構來表示物件,並在有需要時,自動將物件的表示方式轉換為普通資料結構。
資料結構
編碼資料結構:
普通資料結構:
另外需要注意的是,節約記憶體並不是編碼資料結構所特有的 —— 普通資料結構也有相應的記憶體優化模式,比如 sds 就有兩種或以上的表示方式,不同的表示可以 讓同一物件在不同的使用場景下也盡可能地保持高效。
物件與資料結構之間的關係
壓縮列表、整數集合、sds、雙向列表、字典、跳躍表
壓縮列表
壓縮列表具有以下特點:
整數集合
整數集合具有以下特點:
sdsredis 使用 sds (****** dynamic string)而不是 c 語言的字串格式(以空字元 為結尾的字元陣列)來作為 redis 的預設字串表示,sds 具有以下特點:
雙向鍊錶
redis 的雙向鍊錶實現具有以下特性: 字典
redis 的字典實現具有以下特性:
跳躍表redis 的跳躍表實現具有以下特點:
redis 儲存鍵值對的方式
redis 資料庫的實現方法
在 redis 裡面,每個資料庫都是乙個字典,該字典的鍵和值都是我們之前提到的物件,其中:
因為資料庫就是字典,所以針對資料庫的操作都是基於字典操作來 實現的:
記錄過期時間
為了記錄資料庫鍵的過期時間,redis 為每個資料庫建立了另乙個字典,專門使用這個字典來記錄鍵的 過期時間,其中:
帶有過期時間的資料庫示例
rdb 持久化和 aof 持久化的實現原理
rdb 持久化實現原理
redis 會遍歷伺服器中的所有資料庫,訪問資料庫中的所有鍵值對,並根據鍵值對的型別,將這些鍵值對以及它們的過期時間寫入到 rdb 檔案裡面。
aof 持久化實現原理
aof 持久化功能在每次執行命令之後就將協議格式的命令寫入到 aof 緩衝區,然後伺服器再定期將緩衝區的內容寫入到 aof 檔案,還原資料時只要重新執行 aof 檔案裡面的命令即可。
aof 檔案重寫的實現原理
無須對現有的 aof 檔案進行處理,直接根據資料庫目前的狀態來生成新的 aof 檔案。
redis 處理命令請求的方法與模式
命令處理模型
redis 伺服器使用 reactor 模式來連線多個客戶端並處理命令請求,其中:
本節重點
redis 資料庫中的鍵和值都是物件,其中鍵總是乙個字串物件,而值則可以是多種型別物件的其中乙個。
redis 為每種物件都設定了兩種或以上的表示方式,使得 物件可以在不同的應用場景中都有最好的效能表現。
redis 的資料庫就是乙個字典,資料庫操作都是通過字典操作來實現的;除此之外,redis 還使用了另乙個字典來專門記錄鍵值對的過期時間。
rdb 持久化通過遍歷資料庫並將鍵值對寫入到檔案來實現,而 aof 持久化則通過記錄伺服器執行過的命令請求來實現。
redis 伺服器使用 reactor 模式來處理客戶端的命令請求。
因為 redis 的底層實現本身是乙個龐大的課題,所以這一節課只是簡單地介紹了 redis 伺服器關於單機資料庫方面的實現知 識。
至於redis 伺服器提供的其他功能(比如事 務、發布與訂閱、lua 指令碼)以及 redis 提供的多機功能(比如複製、 sentinel 和集群)的介紹則沒有涉及。
如果有興趣繼續了解這方面的知識的話,可以參考我寫的《redis 設計與實現》一書,裡面詳細介紹了 redis 幾乎全部功能的實現原理,應該會對有興趣了解這方面的同學一點幫助。
書本主頁: redisbook.com
malloc實現原理簡介
malloc 是c語言中動態儲存管理 的一組標準庫函式之一。其作用是在記憶體的動態儲存區中分配乙個長度為size的連續空間。其引數是乙個無符號整形數,返回值 是乙個指向所分配的連續儲存域的起始位址的指標。動態記憶體分配 就 是指在程式執行的過程中動態地分配或者 儲存空間的分配記憶體的方法。動態記憶體...
KVC實現原理簡介
kvc,全稱 key value coding。kvc運用了isa swizzling技術。isa swizzling就是型別混合指標機制。kvc主要通過isa swizzling來實現其內部定位查詢。isa指標 is a kind of 指向維護分發表的物件的類。該分發表實際上包含了指向實現類中的...
KVC實現原理簡介
kvc,全稱 key value coding。kvc運用了isa swizzling技術。isa swizzling就是型別混合指標機制。kvc主要通過isa swizzling來實現其內部定位查詢。isa指標 is a kind of 指向維護分發表的物件的類。該分發表實際上包含了指向實現類中的...