雜湊物件編碼實現為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 命令,...