參考資料
參考資料
參考資料
抽象出來的的對象
Redis沒有直接使用前面的幾種數據結構來創建鍵值對數據庫,而是對於這些數據結構來創建了一個對象系統。這個系統包含了字符串對象
,列表對象
,哈希對象
,集合對象
,有序集合對象
使用對象的好處
-
在指向命令之前,根據對象的類型來判斷一個對象是否可以執行給定的命令
-
根據不同的使用場景,對對象設置多種不同的數據結構實現
-
Redis對象系統還實現了
基於引用計數計數
的內存回收機制,當程序不再使用某個對象的時候,這個對象所佔的內存就會被自動釋放 -
帶有訪問時間記錄信息。在服務器啓用了maxmemory功能的情況下,空轉時間較長的哪些鍵可能會優先被服務器刪除
對象的類型和編碼
數據底層存儲結構
底層存儲
Redis使用對象來表示數據庫中的鍵和值,每次當我們在Redis的數據庫中新創建一個鍵值對時,我們至少會創建兩個對象一個,一個對象用作鍵值對的鍵(鍵對象
),另一個對象用作鍵值對的值(值對象
)
RedisObject對象
Redis中的每個對象都由一個
redisObject
結構表示,該結構中和保存數據有關的三個屬性分別是type
屬性。encoding
屬性和ptr
屬性
字符串對象
字符串對象的編碼可以是
int
,raw
和embstr
編碼
- 若字符串對象保存的是整數值,並且這個整數值可以用
long
類型來表示,那麼字符串會將整數值保存成int
編碼 - 若
字符串
對象保存是一個字符串值,並且這個字符串值大於等於32字節,那麼字符傳對象將使用SDS
- 若
字符串
對象保存是一個字符串值,並且這個字符串值小於等於32字節,那麼字符傳對象將使用embstr
=編碼,啊
long double類型表示的浮點數在Redis中也是作爲字符串值來保存的
編碼的轉換
列表對象
列表對象的編碼可以是
壓縮列表
和鏈表
編碼
hash對象
hash對象的編碼可以是
壓縮列表
和字典
集合對象
集合對象的編碼可以是
整數集
和字典
有序集合對象
集合對象的編碼可以是
壓縮隊列
和跳錶