W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
壓縮列表是 Redis 為了節(jié)約內(nèi)存而開發(fā)的, 由一系列特殊編碼的連續(xù)內(nèi)存塊組成的順序型(sequential)數(shù)據(jù)結(jié)構(gòu)。
一個壓縮列表可以包含任意多個節(jié)點(entry), 每個節(jié)點可以保存一個字節(jié)數(shù)組或者一個整數(shù)值。
圖 7-1 展示了壓縮列表的各個組成部分, 表 7-1 則記錄了各個組成部分的類型、長度、以及用途。
表 7-1 壓縮列表各個組成部分的詳細(xì)說明
屬性 | 類型 | 長度 | 用途 |
---|---|---|---|
zlbytes |
uint32_t |
4 字節(jié) |
記錄整個壓縮列表占用的內(nèi)存字節(jié)數(shù):在對壓縮列表進(jìn)行內(nèi)存重分配, 或者計算 zlend 的位置時使用。 |
zltail |
uint32_t |
4 字節(jié) |
記錄壓縮列表表尾節(jié)點距離壓縮列表的起始地址有多少字節(jié): 通過這個偏移量,程序無須遍歷整個壓縮列表就可以確定表尾節(jié)點的地址。 |
zllen |
uint16_t |
2 字節(jié) |
記錄了壓縮列表包含的節(jié)點數(shù)量: 當(dāng)這個屬性的值小于 UINT16_MAX (65535 )時, 這個屬性的值就是壓縮列表包含節(jié)點的數(shù)量; 當(dāng)這個值等于 UINT16_MAX 時, 節(jié)點的真實數(shù)量需要遍歷整個壓縮列表才能計算得出。 |
entryX |
列表節(jié)點 | 不定 | 壓縮列表包含的各個節(jié)點,節(jié)點的長度由節(jié)點保存的內(nèi)容決定。 |
zlend |
uint8_t |
1 字節(jié) |
特殊值 0xFF (十進(jìn)制 255 ),用于標(biāo)記壓縮列表的末端。 |
圖 7-2 展示了一個壓縮列表示例:
zlbytes
屬性的值為 0x50
(十進(jìn)制 80
), 表示壓縮列表的總長為 80
字節(jié)。zltail
屬性的值為 0x3c
(十進(jìn)制 60
), 這表示如果我們有一個指向壓縮列表起始地址的指針 p
, 那么只要用指針 p
加上偏移量 60
, 就可以計算出表尾節(jié)點 entry3
的地址。zllen
屬性的值為 0x3
(十進(jìn)制 3
), 表示壓縮列表包含三個節(jié)點。圖 7-3 展示了另一個壓縮列表示例:
zlbytes
屬性的值為 0xd2
(十進(jìn)制 210
), 表示壓縮列表的總長為 210
字節(jié)。zltail
屬性的值為 0xb3
(十進(jìn)制 179
), 這表示如果我們有一個指向壓縮列表起始地址的指針 p
, 那么只要用指針 p
加上偏移量 179
, 就可以計算出表尾節(jié)點 entry5
的地址。zllen
屬性的值為 0x5
(十進(jìn)制 5
), 表示壓縮列表包含五個節(jié)點。Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: