Redis設實 06 壓縮列表

2021-08-06 05:47:00 字數 1496 閱讀 6691

《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...