一:概述
-redis 原始碼版本為3.0.0.
- redis 集合命令請戳。
-object encoding key 檢視資料底層型別實現。
二:集合物件的底層實現
- 編碼方式
- 字串物件共有兩種編碼方式intset(整數集合)
/ hashtable(字典)
- 編碼方式的選擇
- 當列表物件 元素都是整數/元素數量小於512 則使用 intset(set-max-intset-entries) 。
- 不滿足條件則使用hashtable.
-inset編碼方式
- intset 編碼 使用 intset(陣列) 作為底層實現。(以此來保證集合內唯一的元素)
- 圖示
- hashtable 編碼方式
- 使用字典實現,字典的每個鍵都是乙個字串物件(包含了乙個集合元素)(以此來保證集合內唯一的元素)。
- 字典的每個值都是null(沒什麼作用)。
- 圖示
四:編碼轉換
-當 集合內 不單單儲存整數/長度大於512 則會編碼的轉換 intset -> hashtable.
五:集合命令的實現
-
Redis 集合物件
集合物件的編碼可以是intset或者hashtable。intset編碼的集合物件使用整數集合作為底層實現,集合物件包含的所有元素都被儲存在整數集合裡面。舉個例子,以下 將建立乙個如圖 8 12 所示的intset編碼集合物件 另一方面,hashtable編碼的集合物件使用字典作為底層實現,字典的每...
Redis 雜湊物件和集合物件
雜湊物件編碼實現為ziplist或hashtable ziplist ziplist作為雜湊物件底層實現時,當有新兼職加入雜湊物件,則會儲存鍵的列表節點放到表尾,再兌入值得列表節點。即儲存同一鍵值對節點總是相鄰,儲存鍵的節點在前,儲存值的節點在後。先新增到雜湊物件中的鍵值對會放在列表表尾。使用zip...
11 Redis 集合物件
本文內容均來自 redis設計與實現 一書 集合物件的編碼可以是intset或者hashtable。intset編碼的集合物件使用整數集合作為底層實現,集合物件包含的所有元素都被儲存在整數集合裡面。hashtable編碼的集合物件使用字典作為底層實現,字典的每個鍵都是乙個字串物件,每個字串物件包含了...