Redis 雜湊物件和集合物件

2021-09-30 00:11:10 字數 2097 閱讀 9379

雜湊物件編碼實現為ziplist或hashtable

ziplist

ziplist作為雜湊物件底層實現時,當有新兼職加入雜湊物件,則會儲存鍵的列表節點放到表尾,再兌入值得列表節點。

即儲存同一鍵值對節點總是相鄰,儲存鍵的節點在前,儲存值的節點在後。

先新增到雜湊物件中的鍵值對會放在列表表尾。

使用ziplist編碼的雜湊物件,屬性如下:

hashtable

使用hashtable編碼的雜湊物件,每個鍵值對都用字典鍵值對儲存。

其中字典的鍵,值都是字串物件。

示例:

當雜湊物件處於如下條件時,使用ziplist編碼:

1.所有鍵值對的鍵 ,值字串長度都小於64位元組(hash-max-ziplist-value)。

2.儲存鍵值對數量小於512個(hash-max-ziplist-entris)。

若不能滿足如上條件,則使用hashtable編碼。

正在使用ziplist編碼的雜湊物件,如果新加進來的鍵值物件鍵,值長度大於等於64或者儲存的數量超過512,則會導致編碼轉換。從ziplist編碼轉為hashtable編碼。

雜湊物件操作命令:

集合物件編碼為intset(整數集合)和hashtable

使用示例:

sadd nums 1 3 5
物件屬性如下:

此nums物件使用intset編碼 。

"banana"

"cherry"

物件屬性如下:

此物件使用hashtable編碼。

當滿足如下條件時,使用intset編碼,否則使用hashtable編碼:

1.所有元素都是整數值

2.儲存物件不超過512個(set-max-intset-entris)

有序集合物件編碼為ziplist或skiplist

ziplist

使用ziplist編碼作為底層實現,集合元素使用相鄰的壓縮列表節點儲存,第乙個節點儲存成員,第二個儲存分值。列表內元素按分值從小到大排序,小的靠近對頭,大的靠近隊尾。

集合物件屬性如下:

使用skiplist作為底層實現,元素按分值從小到大儲存所有集合元素,每個節點儲存乙個集合元素,其中object屬性儲存元素成員,score屬性儲存分值。

有序集合物件使用skiplist編碼,實際上用到的是skiplist和字典。同時使用這兩種結構即提高效能,而字典和跳躍表會共享元素成員和分值,也不會造成記憶體損失。

示例:

屬性:

底層資料結構:

編碼轉換

zipllist編碼的使用條件:

1.元素小於128個(zset-max-ziplist-entries)

2.所有成員位元組小於64位元組(zset-max-ziplist-value).

常用操作

Redis 物件 雜湊物件

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

《Redis 雜湊物件》

一 概述 redis 原始碼版本為3.0.0.redis 雜湊命令請戳。object encoding key 檢視資料底層型別實現。二 總結 使用 hash 時 控制資料大小,盡量不要寫入 不要超過 hash max ziplist value配置的位元組。控制雜湊內的個數,盡量不要寫入 不要超過...

Redis 雜湊物件

雜湊物件的編碼可以是ziplist或者hashtable。ziplist編碼的雜湊物件使用壓縮列表作為底層實現,每當有新的鍵值對要加入到雜湊物件時,程式會先將儲存了鍵的壓縮列表節點推入到壓縮列表表尾,然後再將儲存了值的壓縮列表節點推入到壓縮列表表尾,因此 舉個例子,如果我們執行以下 hset 命令,...