Redis物件 Redis物件系統簡介

2022-01-10 02:31:10 字數 1606 閱讀 1382

最新:redis記憶體——三個重要的緩衝區

最新:redis記憶體——記憶體消耗(記憶體都去哪了?)

最新:redis持久化——如何選擇合適的持久化方式

最新:redis持久化——aof日誌

之前幾篇文章,簡單介紹 redis用到的所有主要資料結構,簡單動態字串(sds)、雙端鍊錶、字典、壓縮列表、整數集合、跳躍表。

redis並沒有直接使用這些資料結構來實現鍵值對資料庫,而是基於這些資料結構建立了乙個物件系統,這個系統包含字串物件、列表物件、雜湊物件、集合物件和有序集合物件這五種型別的物件,而每種物件又通過不同的編碼對映到不同的底層資料結構。

redis中的每個物件都由乙個redisobject結構表示,該結構中和儲存資料有關的三個屬性分別是type屬性、 encoding屬性和ptr屬性:

redis使用物件來表示資料庫中的鍵和值,每次當我們在redis的資料庫中新建立乙個鍵值對時,我們至少會建立兩個物件,乙個物件用作鍵值對的健(鍵物件),另乙個物件用作鍵值對的值(值物件)。

typedef struct redisobiect
其中redis的鍵物件都是字串物件,而redis的值物件主要有字串、雜湊、列表、集合、有序集合幾種。其分別對應的內部編碼和底層資料結構如下圖所示:

redis中的物件,大都是通過多種資料結構來實現的,為什麼會這樣設計呢?用一種固定的資料結構來實現,不是更加簡單嗎?

redis這樣設計有兩個好處:

可以自由改進內部編碼,而對外的資料結構和命令沒有影響,這樣一旦開發出更優秀的內部編碼,無需改動外部資料結構和命令,例如redis3.2提供了quicklist,其結合了ziplist和linkedlist兩者

的優勢,為列表型別提供了一種更為優秀的內部編碼實現,而對外部使用者來說基本感知不到。 這一點比較像程式設計中的分層架構。

多種內部編碼實現可以在不同場景下發揮各自的優勢,從而優化物件在不同場景下的使用效率。例如ziplist比較節省記憶體,但是在列表元素比較多的情況下,效能會有所下降,這時候redis會根據配置選項將列表型別的內部實現轉換linkedlist。 (後續文章將根據具體物件介紹)

最新:redis記憶體——三個重要的緩衝區

最新:redis記憶體——記憶體消耗(記憶體都去哪了?)

最新:redis持久化——如何選擇合適的持久化方式

最新:redis持久化——aof日誌

redis持久化——記憶體快照(rdb)

一文回顧redis五大物件(資料型別)

redis物件——有序集合(zset)

redis物件——集合(set)

redis物件——列表(list)

redis物件——雜湊(hash)

redis資料結構——quicklist

redis物件——字串

redis物件——redis物件系統簡介

redis資料結構——壓縮列表

redis資料結構——整數集合

redis資料結構——跳躍表

redis資料結構——字典

redis資料結構——鍊錶

redis資料結構——簡單動態字串sds

Redis 物件 雜湊物件

每種型別的變數至少使用了兩種不同的編碼 1 五種物件的底層編碼 字串型別物件 redis encoding int redis encoding embstr redis encoding raw 列表型別的物件 redis encoding ziplist redis encoding linke...

Redis物件系統

在上一節學習redis中的六種基礎資料結構,但在redis中並沒有直接使用以上的資料結構實現鍵值對資料庫,而是基於這些資料結構構建了乙個物件系統 字串物件 string 列表物件 list 雜湊物件 hash 集合物件 set 和有序集合物件 zset 對於redis資料庫,鍵總是乙個字串物件,而值...

redis物件型別

redis物件型別 redis並沒有用我們先前提到的的主要資料結構 sds,鍊錶,字典,壓縮列表,跳躍列表作為redis物件的直接實現.而是基於這些資料 結構建立乙個物件系統.這個系統包括了字串物件,雜湊物件,列表物件,集合物件和有序集合物件.每種物件都至少用到了乙個我們前面介紹的資料結構.一.物件...