Redis對象的實現以及內存的管理


參考資料
參考資料
參考資料

抽象出來的的對象

Redis沒有直接使用前面的幾種數據結構來創建鍵值對數據庫,而是對於這些數據結構來創建了一個對象系統。這個系統包含了字符串對象,列表對象,哈希對象,集合對象,有序集合對象

使用對象的好處

  • 在指向命令之前,根據對象的類型來判斷一個對象是否可以執行給定的命令

  • 根據不同的使用場景,對對象設置多種不同的數據結構實現

  • Redis對象系統還實現了基於引用計數計數的內存回收機制,當程序不再使用某個對象的時候,這個對象所佔的內存就會被自動釋放

  • 帶有訪問時間記錄信息。在服務器啓用了maxmemory功能的情況下,空轉時間較長的哪些鍵可能會優先被服務器刪除

對象的類型和編碼

數據底層存儲結構

底層存儲

在這裏插入圖片描述
Redis使用對象來表示數據庫中的鍵和值,每次當我們在Redis的數據庫中新創建一個鍵值對時,我們至少會創建兩個對象一個,一個對象用作鍵值對的鍵(鍵對象),另一個對象用作鍵值對的值(值對象

RedisObject對象

Redis中的每個對象都由一個redisObject結構表示,該結構中和保存數據有關的三個屬性分別是type屬性。encoding屬性和ptr屬性

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

字符串對象

字符串對象的編碼可以是intrawembstr

編碼

  • 若字符串對象保存的是整數值,並且這個整數值可以用long類型來表示,那麼字符串會將整數值保存成int編碼
  • 字符串對象保存是一個字符串值,並且這個字符串值大於等於32字節,那麼字符傳對象將使用SDS
  • 字符串對象保存是一個字符串值,並且這個字符串值小於等於32字節,那麼字符傳對象將使用embstr=編碼,啊
    在這裏插入圖片描述
    long double類型表示的浮點數在Redis中也是作爲字符串值來保存的
    在這裏插入圖片描述

編碼的轉換

在這裏插入圖片描述

列表對象

列表對象的編碼可以是壓縮列表鏈表
在這裏插入圖片描述

編碼

在這裏插入圖片描述
在這裏插入圖片描述

hash對象

hash對象的編碼可以是壓縮列表字典

在這裏插入圖片描述

集合對象

集合對象的編碼可以是整數集字典

在這裏插入圖片描述

有序集合對象

集合對象的編碼可以是壓縮隊列跳錶

在這裏插入圖片描述

在這裏插入圖片描述

類型檢查和命令多態

內存回收

在這裏插入圖片描述

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章