《redis設計與實現 黃建巨集 著》第7章
該書基於redis2.9,即redis3.0開發版編寫
為節約記憶體而開發
由一系列特殊編碼的連續記憶體塊組成的順序型(sequential)資料結構
可包含任意多個節點(entry),每個節點可儲存乙個位元組陣列或乙個整數值
1個壓縮列表節點可儲存1個位元組陣列或1個整數值
位元組陣列長度有3種:
·長度小於等於63(2的6次方–1)位元組的位元組陣列
·長度小於等於16383(2的14次方–1)位元組的位元組陣列
·長度小於等於4294967295(2的32次方–1)位元組的位元組陣列
整數值長度有6種:
·4位長,介於0至12間的無符號整數
·1位元組長的有符號整數
·3位元組長的有符號整數
·int16_t型別整數
·int32_t型別整數
·int64_t型別整數
previous_entry_length屬性
記錄前一節點長度,程式可根據當前節點的起始位址計算出前一節點起始位址
以位元組為單位
長度可是1或5位元組:
若前一節點長度小於254位元組,則該屬性長度為1位元組,屬性值為前一節點長度
若前一節點長度大於等於254位元組,則該屬性長度為5位元組,其第一位元組為0xfe(十進位制值254),後4個位元組儲存前一節點長度
encoding屬性
1位元組、2位元組或5位元組長,最高位為00、01或10的是位元組陣列編碼,該編碼表示content屬性儲存的是位元組陣列,陣列長度由編碼除最高2位後的其他位記錄
1位元組長,值的最高位為11的是整數編碼,該編碼表示content屬性儲存的是整數值,整數值的型別和長度由編碼除最高2位後的其他位記錄
content屬性
儲存節點的值
在特殊情況下產生的連續多次空間擴充套件操作稱「連鎖更新」(cascade update)
新增、刪除節點都可能會引發連鎖更新
最壞複雜度為o(n平方)
儘管連鎖更新複雜度較高,但真正造成效能問題的機率是很低
例:
redis 壓縮列表
壓縮列表是列表鍵和雜湊鍵的底層實現之一。當乙個列表鍵只包含少量列表項,並且每個列表項要麼就是小整數值,要麼就是長度比較短的字串,那麼redis就會使用壓縮列表來做列表鍵的底層實現。另外,當乙個雜湊鍵只包含少量鍵值對,並且每個鍵值對的鍵和值要麼就是小整數值,要麼就是長度比較短的字串,那麼redis就會...
Redis設實 05 整數集合
redis設計與實現 黃建巨集 著 第6章 該書基於redis2.9,即redis3.0開發版編寫 用於儲存整數值的集合抽象資料結構 可儲存型別為int16 t int32 t int64 t的整數值 集合中不會出現重複元素 typedef struct intsetintset 整數集合的底層實現...
Redis之壓縮列表
壓縮列表 ziplist 是列表鍵和雜湊鍵的底層實現之一。當乙個列表鍵只包含少量列表項,並且每個列表項要麼就是小整數值,要麼就是長度比較短的字串,redis就會使用壓縮列表來做列表鍵的底層實現。下面看一下壓縮列表實現的列表鍵 列表鍵裡面包含的都是1 3 5 10086這樣的小整數值,以及 hello...