每種型別的變數至少使用了兩種不同的編碼
1 五種物件的底層編碼:
字串型別物件:redis_encoding_int redis_encoding_embstr redis_encoding_raw
列表型別的物件:redis_encoding_ziplist redis_encoding_linkedlist
雜湊物件:redis_encoding_ziplist redis_encoding_ht
集合物件:redis_encoding_intset redis_encoding_ht
有序集合物件:redis_encoding_ziplist redis_encoding_skiplist
a:ziplist編碼的雜湊物件使用壓縮列表作為底層實現,每個壓縮列表 儲存了乙個整個雜湊物件中的元素(將雜湊中多個物件儲存在乙個壓縮列表中 更節省空間),當由新的鍵值對要加入到雜湊物件時,先將儲存鍵的壓縮列表節點加入到壓縮列表表尾,再將儲存值的壓縮列表節點加入到壓縮列表表尾。
同一鍵值對的鍵值節點相鄰,且鍵在前,值在後。
先加入的鍵值對在壓縮列表表頭,後加入的在壓縮列表表尾。
b:hashtable編碼的雜湊物件 使用 字典 作為底層實現,雜湊物件中的每個鍵值對使用字典鍵值對來儲存。
每個鍵是乙個字串物件,每個值是乙個字串物件
2 編碼轉換條件
當 a:每個鍵或值的 字串元素的長度均小於64位元組,且
b:列表中元素個數小於512個
時,會用壓縮列表實現雜湊物件。否則採用字典實現雜湊物件。
api:
hset
hget
hexists
hdel
hlen
hgetall
3 命令在編碼上的作用原理
根據2進行推測
《Redis 雜湊物件》
一 概述 redis 原始碼版本為3.0.0.redis 雜湊命令請戳。object encoding key 檢視資料底層型別實現。二 總結 使用 hash 時 控制資料大小,盡量不要寫入 不要超過 hash max ziplist value配置的位元組。控制雜湊內的個數,盡量不要寫入 不要超過...
Redis 雜湊物件
雜湊物件的編碼可以是ziplist或者hashtable。ziplist編碼的雜湊物件使用壓縮列表作為底層實現,每當有新的鍵值對要加入到雜湊物件時,程式會先將儲存了鍵的壓縮列表節點推入到壓縮列表表尾,然後再將儲存了值的壓縮列表節點推入到壓縮列表表尾,因此 舉個例子,如果我們執行以下 hset 命令,...
Redis 雜湊物件和集合物件
雜湊物件編碼實現為ziplist或hashtable ziplist ziplist作為雜湊物件底層實現時,當有新兼職加入雜湊物件,則會儲存鍵的列表節點放到表尾,再兌入值得列表節點。即儲存同一鍵值對節點總是相鄰,儲存鍵的節點在前,儲存值的節點在後。先新增到雜湊物件中的鍵值對會放在列表表尾。使用zip...