1:壓縮列表是為了節省記憶體而設計的,是一種線性的資料結構。主要用在雜湊和列表兩種資料型別中。
2:壓縮列表包含主要包含五個部分,這五個部分順序排列組合在一起。
結構如下圖所示。
表節點,有三個域組成。previous_entry_length,用來記錄前乙個節點的長度。encoding,記錄下乙個域的資料型別和長度。content,儲存節點的值。
3:壓縮列表有一種極端情況,會導致效能下降——連鎖更新。previous_entry_length,記錄的是上一節點的長度,當上一節點小於254位元組時,該屬性使用1位元組儲存。當大於254位元組時,使用5位元組。如果之前previous_entry_length都使用1位元組,且長度都接近254位元組時,會導致連鎖更新的情況。
1:不同資料型別對應的編碼物件
2:字串對應的編碼方式。1:整數值實現的字串物件。2:embstr實現的字串(類似sds,用於儲存端的字串)。3:raw,sds動態字串
轉換規則:
3:列表物件,編碼包含兩種,ziplist(壓縮列表),linkedlist(雙向鍊錶)。
轉換規則:
1:儲存的所有字串長度都小於64位元組。
2:列表物件儲存的元素數量小於512個。
當同時滿足上面兩條規則時,使用列表物件,否則使用鍊錶物件。
4:雜湊物件,使用ziplist和hashtable編碼
轉換規則:
1:雜湊物件儲存的所有鍵和值的字串長度都小於64位元組。
2:儲存的鍵值對數量小於512個。
同時滿足,使用ziplist,否則使用hashtable.
5:集合物件,使用intset或者hashtable編碼。
轉換規則:
1:集合物件儲存的元素值都是整數。
2:集合物件儲存的元素數量不超過512個。
同時滿足上面兩個條件,則使用intset,否則hashtable。
6:有序集合,使用ziplist或者skiplist
轉換規則:
1:有序集合儲存的元素數量小於128個。
2:儲存的所有成員長度都小於64位元組。
同時滿足上面兩個條件,則使用ziplist,否則skiplist。
基於資料結構的東西就寫這麼多吧,當然內容都是《redis設計與實現-黃健巨集》上的。我只是個搬運工,這本書寫的挺不錯的,建議購買。更詳細的實現細節,可以看redis原始碼。
redis資料結構整理(二)
摘要 1.各個資料結構的應用舉例 1.1 string型別應用舉例 1.2list型別應用舉例 1.3set型別應用舉例 1.4sorted set型別應用舉例 1.5hash型別應用舉例 2.redis 報錯整理 內容 1.各個資料結構的應用舉例 1.1 string型別應用舉例 利用incr,d...
Redis學習(二) Redis資料結構簡介
結構型別 結構儲存的值 結構的讀寫能力 string 字串 整數或者浮點數 對整個字串或者其中一部分操作,對整數和浮點數自增或自減 list 鍊錶,鍊錶上每個節點包含乙個字串 從鍊錶的兩端推入或彈出元素,修剪,讀取元素,查詢或移除元素 set包含字串的無序收集器,每個字串唯一 新增 移除 獲取單個元...
Redis資料結構 二 鍊錶
鍊錶提供了高效的節點重排能力,以及順序性的節點訪問方式,並且可以通過增刪節點來靈活的調整鍊錶的長度 列表鍵的底層實現之一就是鍊錶.當乙個列表鍵包含了數量比較多的元素,又或者列表中包含的元素都是比較長的字串時,redis就會使用鍊錶作為列表鍵的底層實現 除了列表鍵之外,發布與訂閱,慢查詢,監視器等功能...