主頁(yè) > 知識(shí)庫(kù) > 詳解redis數(shù)據(jù)結(jié)構(gòu)之壓縮列表

詳解redis數(shù)據(jù)結(jié)構(gòu)之壓縮列表

熱門標(biāo)簽:西藏教育智能外呼系統(tǒng)價(jià)格 地圖標(biāo)注費(fèi)用 百度商家地圖標(biāo)注怎么做 最簡(jiǎn)單的百度地圖標(biāo)注 小紅書(shū)怎么地圖標(biāo)注店 太原營(yíng)銷外呼系統(tǒng) 玄武湖地圖標(biāo)注 竹間科技AI電銷機(jī)器人 地圖標(biāo)注如何即時(shí)生效

 詳解redis數(shù)據(jù)結(jié)構(gòu)之壓縮列表

redis使用壓縮列表作為列表鍵和哈希鍵的底層實(shí)現(xiàn)之一。當(dāng)一個(gè)列表鍵只包含少量的列表項(xiàng),并且每個(gè)列表項(xiàng)都是由小整數(shù)值或者是短字符串組成,那么redis就會(huì)使用壓縮列表存儲(chǔ)列表項(xiàng);同理,當(dāng)一個(gè)哈希表包含的鍵值對(duì)都是由小整數(shù)值或者是短字符串組成,并且存儲(chǔ)的鍵值對(duì)數(shù)目不多時(shí),redis也會(huì)使用壓縮列表來(lái)存儲(chǔ)哈希表。以下是壓縮列表存儲(chǔ)結(jié)構(gòu):

 

  • zlbytes長(zhǎng)度為4個(gè)字節(jié),記錄了整個(gè)壓縮列表所占用的字節(jié)數(shù)
  • zltail長(zhǎng)度為4個(gè)字節(jié),記錄了壓縮列表起始位置到壓縮列表尾節(jié)點(diǎn)的偏移量
  • zllen長(zhǎng)度為2個(gè)字節(jié),記錄了當(dāng)前壓縮列表中所擁有的entry的數(shù)量
  • entryX存儲(chǔ)了實(shí)際的對(duì)象,其長(zhǎng)度根據(jù)具體的實(shí)體而定
  • zlend長(zhǎng)度為1個(gè)字節(jié),保存了十進(jìn)制的255,用于標(biāo)記壓縮列表的末端

      通過(guò)上面的結(jié)構(gòu)可以看出,壓縮列表存儲(chǔ)數(shù)據(jù)的為一整個(gè)數(shù)組,在這個(gè)數(shù)組中前12個(gè)字節(jié)固定保存了zlbytes、zltail和zllen三個(gè)表征整個(gè)壓縮列表屬性的數(shù)據(jù),而后續(xù)的數(shù)組則保存了entry的數(shù)組,最后通過(guò)一個(gè)字節(jié)長(zhǎng)度的屬性zlend來(lái)記錄當(dāng)前壓縮列表已經(jīng)結(jié)束。

      在上述結(jié)構(gòu)中,我們并沒(méi)有看到任何屬性用以表征每個(gè)entry的長(zhǎng)度及其存儲(chǔ)的數(shù)據(jù)類型,如字符串或者是整型值,而壓縮列表整體其實(shí)是一個(gè)數(shù)組,因而如果不對(duì)這兩個(gè)類型的數(shù)據(jù)進(jìn)行記錄那么將無(wú)法對(duì)每一個(gè)entry進(jìn)行區(qū)分。實(shí)際上,每個(gè)entry是由三部分組成:previous_entry_length、encoding和content。

1.previous_entry_length為一個(gè)整型值,記錄了前一個(gè)節(jié)點(diǎn)整體占用字節(jié)的長(zhǎng)度,當(dāng)前一個(gè)節(jié)點(diǎn)的長(zhǎng)度小于254時(shí),該屬性占用一個(gè)字節(jié),當(dāng)前一個(gè)節(jié)點(diǎn)長(zhǎng)度大于等于254時(shí),該屬性則占用5個(gè)字節(jié),其第一個(gè)字節(jié)會(huì)保存十進(jìn)制的0xFE,即十進(jìn)制的254,后四個(gè)字節(jié)則保存了前一節(jié)點(diǎn)的長(zhǎng)度;

2.encoding屬性長(zhǎng)度不定,其主要保存了當(dāng)前節(jié)點(diǎn)的編碼格式和節(jié)點(diǎn)的長(zhǎng)度。當(dāng)encoding屬性的最高兩位為00、01或10時(shí),表示其存儲(chǔ)的是字節(jié)數(shù)組。其為00時(shí),encoding占用1個(gè)字節(jié),其后6位保存了content屬性的長(zhǎng)度;為01時(shí),encoding占用2個(gè)字節(jié),其后14位保存了content屬性的長(zhǎng)度;為10時(shí),則其后38位保存了content屬性的長(zhǎng)度。當(dāng)encoding屬性的最高兩位為11時(shí),表示其存儲(chǔ)的是一個(gè)整型值,并且此時(shí)encoding屬性的長(zhǎng)度為1個(gè)字節(jié)。當(dāng)11后兩位,也即第三位和第四位為00時(shí),表示存儲(chǔ)的是int16_t類型的整數(shù),當(dāng)其為01時(shí),表示存儲(chǔ)的是int32_t類型的整數(shù),當(dāng)其為10時(shí),表示存儲(chǔ)的是int64_t類型的整數(shù),當(dāng)其為11時(shí),表示存儲(chǔ)的是24位有符號(hào)整數(shù)。(這四種情況后續(xù)位上的值都為0)當(dāng)11后五位為1,并且最后一位為0時(shí),表示存儲(chǔ)的是8位有符號(hào)整數(shù)。當(dāng)11后兩位為11時(shí),那么該節(jié)點(diǎn)就沒(méi)有content屬性,該節(jié)點(diǎn)的屬性值保存在encoding屬性的后四個(gè)位上,并且其值要介于0~12之間。

3.content屬性保存了該節(jié)點(diǎn)的實(shí)際的字符串或整型數(shù)據(jù)。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

您可能感興趣的文章:
  • Redis底層數(shù)據(jù)結(jié)構(gòu)詳解
  • 詳解Redis數(shù)據(jù)結(jié)構(gòu)之跳躍表
  • redis中的數(shù)據(jù)結(jié)構(gòu)和編碼詳解
  • redis內(nèi)部數(shù)據(jù)結(jié)構(gòu)之SDS簡(jiǎn)單動(dòng)態(tài)字符串詳解
  • redis數(shù)據(jù)結(jié)構(gòu)之intset的實(shí)例詳解
  • 詳解redis數(shù)據(jù)結(jié)構(gòu)之sds
  • Redis中5種數(shù)據(jù)結(jié)構(gòu)的使用場(chǎng)景介紹
  • Redis底層數(shù)據(jù)結(jié)構(gòu)之dict、ziplist、quicklist詳解

標(biāo)簽:揚(yáng)州 贛州 澳門 景德鎮(zhèn) 廣東 唐山 香港 林芝

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解redis數(shù)據(jù)結(jié)構(gòu)之壓縮列表》,本文關(guān)鍵詞  詳解,redis,數(shù)據(jù)結(jié)構(gòu),之,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解redis數(shù)據(jù)結(jié)構(gòu)之壓縮列表》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于詳解redis數(shù)據(jù)結(jié)構(gòu)之壓縮列表的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章