一:概述
-redis 原始碼版本為3.0.0.
- redis 雜湊命令請戳。
-object encoding key 檢視資料底層型別實現。
二:總結
- 使用 hash 時
-控制資料大小,盡量不要寫入 不要超過 hash-max-ziplist-value配置的位元組。
-控制雜湊內的個數,盡量不要寫入 不要超過 hash-max-ziplist-entries配置的個數。
- 否則會引起底層資料結構的變化導致記憶體耗費的增加,同時資料過大和個數過多,都會導致雜湊效能降低。
二:雜湊物件的底層實現
- 編碼方式
- 字串物件共有三種編碼方式ziplist(壓縮列表) / hashtable(字典底層實現)
- 編碼方式的選擇
- 當雜湊物件元素都 小於64位元組(hash-max-ziplist-value) / 元素數量小於512個(hash-max-ziplist-entries) 則使用 ziplist 。
- 不滿足條件則使用 hashtable.
-ziplist編碼方式
- 為了節約記憶體而開發,由一系列的特殊編碼連續記憶體塊組成的順序型資料結構。
- 儲存流程
- 每當新的雜湊節點加入,會將 雜湊鍵/雜湊值 推入壓縮列表的隊尾。(類佇列)
- 圖示
- hashtable 編碼方式
- hastable 使用字典作為底層實現,雜湊中的每乙個鍵值都是用乙個字典鍵值來儲存。
- 圖示
四:編碼轉換
- 當ziplist 大於64/長度大於512 則會進行編碼的轉換 ziplist -> hashtable.
五:字串命令的實現
-
Redis 物件 雜湊物件
每種型別的變數至少使用了兩種不同的編碼 1 五種物件的底層編碼 字串型別物件 redis encoding int redis encoding embstr redis encoding raw 列表型別的物件 redis encoding ziplist redis encoding linke...
Redis 雜湊物件
雜湊物件的編碼可以是ziplist或者hashtable。ziplist編碼的雜湊物件使用壓縮列表作為底層實現,每當有新的鍵值對要加入到雜湊物件時,程式會先將儲存了鍵的壓縮列表節點推入到壓縮列表表尾,然後再將儲存了值的壓縮列表節點推入到壓縮列表表尾,因此 舉個例子,如果我們執行以下 hset 命令,...
Redis 雜湊物件和集合物件
雜湊物件編碼實現為ziplist或hashtable ziplist ziplist作為雜湊物件底層實現時,當有新兼職加入雜湊物件,則會儲存鍵的列表節點放到表尾,再兌入值得列表節點。即儲存同一鍵值對節點總是相鄰,儲存鍵的節點在前,儲存值的節點在後。先新增到雜湊物件中的鍵值對會放在列表表尾。使用zip...