redis源碼分析教程之壓縮鏈表ziplist詳解-創新互聯

前言

成都創新互聯公司主營通化網站建設的網絡公司,主營網站建設方案,成都App定制開發,通化h5微信小程序定制開發搭建,通化網站營銷推廣歡迎通化等地區企業咨詢

壓縮列表(ziplist)是由一系列特殊編碼的內存塊構成的列表,它對于Redis的數據存儲優化有著非常重要的作用。這篇文章總結一下redis中使用非常多的一個數據結構壓縮鏈表ziplist。該數據結構在redis中說是無處不在也毫不過分,除了鏈表以外,很多其他數據結構也是用它進行過渡的,比如前面文章提到的SortedSet。下面話不多說了,來一起看看詳細的介紹吧。

一、壓縮鏈表ziplist數據結構簡介

首先從整體上看下ziplist的結構,如下圖:

redis源碼分析教程之壓縮鏈表ziplist詳解

壓縮鏈表ziplist結構圖

可以看出字段很多,字節大小也不同,但這也就是壓縮鏈表的精髓所在了,我們依次總結一下。

 

字段 含義
zlbytes 該字段是壓縮鏈表的第一個字段,是無符號整型,占用4個字節。用于表示整個壓縮鏈表占用的字節數(包括它自己)。
zltail 無符號整型,占用4個字節。用于存儲從壓縮鏈表頭部到最后一個entry(不是尾元素zlend)的偏移量,在快速跳轉到鏈表尾部的場景使用。
zllen 無符號整型,占用2個字節。用于存儲壓縮鏈表中包含的entry總數。
zlend 特殊的entry,用來表示壓縮鏈表的末尾。占用一個字節,值恒為255。

總結為ziplist的頭跟尾,下面再總結一下重中之重的entry字段。

一般來說,一個entry由prevlen,encoding,entry-data三個字段組成,但當entry是個很小的整數時,會根據編碼省略掉entry-data字段。下面依次進行總結:

首先是字段prevlen:表示前一個entry的長度,有兩種編碼方式。

  • 當長度小于255字節時,用一個字節存儲。
  • 當長度大于等于255時,用五個字節進行存儲,其中第一個字節會被設置為255表示前一個entry的長度由后面四個字節表示。

然后是字段encoding:它會根據當前元素內容的不同會采用不同的編碼方式,如下:

1、如果元素內容為字符串,encoding的值分別為:

00xx xxxx :00開頭表示該字符串的長度用6個bit表示。

01xx xxxx | xxxx xxxx :01開頭表示字符串的長度由14bit表示,這14個bit采用大端存儲。

1000 0000 | xxxx xxxx | xxxx xxxx | xxxx xxxx | xxxx xxxx :10開頭表示后續的四個字節為字符串長度,這32個bit采用大端存儲。

2、如果元素內容為數字,encoding的值分別為:

1100 0000:表示數字占用后面2個字節。

1101 0000:表示數字占用后面4個字節。

1110 0000:表示數字占用后面8個字節。

1111 0000 :表示數字占用后面3個字節。

1111 1110 :表示數字占用后面1個字節。

1111 1111 :表示壓縮鏈表中最后一個元素(特殊編碼)。

1111 xxxx :表示只用后4位表示0~12的整數,由于0000,1110跟1111三種已經被占用,也就是說這里的xxxx四位只能表示0001~1101,轉換成十進制就是數字1~13,但是redis規定它用來表示0~12,因此當遇到這個編碼時,我們需要取出后四位然后減1來得到正確的值。

最后是字段entry-data:如果元素的值為字符串,則保存元素本身的值。如果元素的值為很小的數字(按上面編碼規則即0~12),則沒有該字段。

壓縮鏈表的編碼非常復雜,但這也正是該數據結構的精髓所在,一起來看一個例子吧:

注:這個例子是redis源碼中提到的

//由元素2,5組成的壓縮鏈表
[0f 00 00 00] [0c 00 00 00] [02 00] [00 f3] [02 f6] [ff]
 |  |  | | | |
 zlbytes zltail entries "2" "5" end
//字符串"Hello World"編碼后的內容
[02] [0b] [48 65 6c 6c 6f 20 57 6f 72 6c 64]

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

分享題目:redis源碼分析教程之壓縮鏈表ziplist詳解-創新互聯
轉載來源:http://m.kartarina.com/article26/cddijg.html

成都網站建設公司_創新互聯,為您提供域名注冊品牌網站建設網站維護網頁設計公司移動網站建設品牌網站制作

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

網站優化排名
主站蜘蛛池模板: 亚洲精品无码99在线观看| 无码精品人妻一区| 精品久久久久久无码国产| 一区二区三区人妻无码| 无码人妻丰满熟妇区免费| 免费无码一区二区| 亚洲精品无码久久久久久久| 午夜无码人妻av大片色欲| 无码国产精品一区二区免费式芒果 | 国模无码视频一区| 国产精品VA在线观看无码不卡| 色综合久久无码中文字幕| 精品无人区无码乱码毛片国产 | 无码专区永久免费AV网站| 国产三级无码内射在线看| 日韩精品无码人妻免费视频| 久久无码人妻一区二区三区 | 久久亚洲精品无码网站| 人妻无码一区二区三区AV| 人妻丝袜无码专区视频网站| 啊灬啊别停灬用力啊无码视频| 人妻AV中出无码内射| 亚洲AV无码一区二区三区鸳鸯影院| 亚洲AV无码乱码在线观看富二代| 人妻老妇乱子伦精品无码专区| 久久久久亚洲Av无码专| 亚洲A∨无码一区二区三区| 亚洲中文字幕久久精品无码APP | 性色AV一区二区三区无码| 免费无码AV片在线观看软件| 高清无码v视频日本www| 亚洲另类无码专区首页| 亚洲成a人无码亚洲成av无码| 人妻少妇乱子伦无码视频专区| 无码少妇精品一区二区免费动态| 潮喷失禁大喷水aⅴ无码| 大桥久未无码吹潮在线观看| 中文字幕无码免费久久| 无码专区—VA亚洲V天堂| 无码国产精品一区二区免费vr | 国产精品无码DVD在线观看|