redis數據類型介紹

數據類型 實現方式 描述
String int 用來保存整數值
raw 用來保存長字符串(長度大於44字節)
embstr 保存短字符串(長度小於44字節)
List ziplist(壓縮列表)

列表保存元素個數小於512個

每個元素長度小於64字節

壓縮列表是Redis爲了節省內存而開發的,是由一系列特殊編碼的連續內存塊組成的順序型數據結構,相對於字典數據結構,壓縮列表用於元素個數少、元素長度小的場景

linkedlist(雙端鏈表) 當無法使用ziplist列表時則使用linkedlist
Hash

ziplist(壓縮列表)

 

1、列表保存元素個數小於512個

2、每個元素長度小於64字節

hashtable

hashtable 編碼的哈希表對象底層使用字典數據結構,哈希對象中的每個鍵值對都使用一個字典鍵值對。

 

SET intset intset 編碼的集合對象使用整數集合作爲底層實現,集合對象包含的所有元素都被保存在整數集合中
hashtable hashtable 編碼的集合對象使用 字典作爲底層實現,字典的每個鍵都是一個字符串對象,這裏的每個字符串對象就是一個集合中的元素,而字典的值則全部設置爲 null。這裏可以類比Java集合中HashSet 集合的實現,HashSet 集合是由 HashMap 來實現的,集合中的元素就是 HashMap 的key,而 HashMap 的值都設爲 null。
ZSET ziplist ziplist 編碼的有序集合對象使用壓縮列表作爲底層實現,每個集合元素使用兩個緊挨在一起的壓縮列表節點來保存,第一個節點保存元素的成員,第二個節點保存元素的分值。並且壓縮列表內的集合元素按分值從小到大的順序進行排列,小的放置在靠近表頭的位置,大的放置在靠近表尾的位置。
skiplist

skiplist 編碼的有序集合對象使用 zet 結構作爲底層實現,一個 zset 結構同時包含一個字典和一個跳躍表

 

字典的鍵保存元素的值,字典的值則保存元素的分值;跳躍表節點的 object 屬性保存元素的成員,跳躍表節點的 score 屬性保存元素的分值。

 

  這兩種數據結構會通過指針來共享相同元素的成員和分值,所以不會產生重複成員和分值,造成內存的浪費。

 

  說明:其實有序集合單獨使用字典或跳躍表其中一種數據結構都可以實現,但是這裏使用兩種數據結構組合起來,原因是假如我們單獨使用 字典,雖然能以 O(1) 的時間複雜度查找成員的分值,但是因爲字典是以無序的方式來保存集合元素,所以每次進行範圍操作的時候都要進行排序;假如我們單獨使用跳躍表來實現,雖然能執行範圍操作,但是查找操作有 O(1)的複雜度變爲了O(logN)。因此Redis使用了兩種數據結構來共同實現有序集合。

 

https://www.cnblogs.com/ysocean/p/9102811.html 

https://www.cnblogs.com/ysocean/p/9080942.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章