首頁 常見問題 正文
聚名企服

redis數據結構的底層實現是怎樣的?

轉載 2021-12-20 16:01:16 6974
redis數據結構的底層實現是怎樣的?實現方法:1、每種數據結構都有自己底層的內部編碼實現,而且是多種實現,這樣Redis會在合適的場景選擇合適的內部編碼;2、每種數據結構都有兩種以上的內部編碼實現;3、內部編碼可以作為多種外部數據結構的內部實現。

redis數據結構的底層實現是怎樣的?

Redis有五種基本數據結構:字符串、hash、set、zset、list。下面解釋下載Redis 3.0.6版本中底層是怎樣實現他們的。

總結一下

(1)每種數據結構都有自己底層的內部編碼實現,而且是多種實現,這樣Redis會在合適的場景選擇合適的內部編碼。

(2)可以看到每種數據結構都有兩種以上的內部編碼實現,例如string數據結構就包含了raw、int和embstr三種內部編碼。

(3)同時,有些內部編碼可以作為多種外部數據結構的內部實現,例如ziplist就是hash、list和zset共有的內部編碼。

動態字符串SDS

SDS是“simple dynamic string”的縮寫。Redis中所有場景出現的字符串,基本都是有SDS來實現的:

所有非數字的key, 如:set msg “hello” 中的key msg

字符串數據類型的值,如:set msg “hello” 中的value “hello”

非字符串數據類型中的“字符串值”,如:rpush fruits “apple” “banana"中的"apple” “banana”

SDS長這樣:

redis數據結構的底層實現是怎樣的?

free:還剩多少空間

len:字符串長度

buf:存放的字符數組

空間預分配

為減少修改字符串代理的內存重分配次數,SDS采用了“一次管夠“的策略:

若修改之后SDS長度 < 1MB,則多分配現有len長度的空間

若修改之后SDS長度 >= 1MB ,則擴充除了滿足修改之后的長度外,額外多1MB空間。

惰性空間釋放

為避免縮短字符串時候的內存重分配操作,SDS在數據減少時,并不立刻釋放空間。

int

就是redis中存放的各種數字,包括故意加“”的

set game “111”

雙向鏈表

雙向鏈表如lpush, rpush, lpop, rpop

長這樣:

 

分兩部分:

“統籌部分”:橘黃色

head:指向具體雙向鏈表的頭

tail:指向具體雙向鏈表的尾

len:雙向鏈表的長度

“具體實施方”:藍色

有前驅pre和后繼next

雙向鏈表由 list 和 listNode 兩個數據結構構成。

聲明:本文轉載于:互聯網,如有侵犯,請聯系service@Juming.com刪除
相關標簽: redis數據結構

相關文章

相關專題

編輯推薦

  • 域名注冊專題合集 域名注冊專題合集

  • 域名搶注專題合集 域名搶注專題合集

  • 企業建站專題合集 企業建站專題合集

主站蜘蛛池模板: 国产成人无码一区二区在线播放 | 日韩专区无码人妻| 中文午夜人妻无码看片| 少妇无码AV无码一区| 久久亚洲精品中文字幕无码| 成人h动漫精品一区二区无码| 亚洲高清无码专区视频| 性色av极品无码专区亚洲| 国产乱人伦Av在线无码| 亚洲AV无码乱码在线观看牲色 | 亚洲av无码成h人动漫无遮挡 | 亚洲中文字幕不卡无码 | 中日韩亚洲人成无码网站| 亚洲中文字幕无码爆乳app| 国产亚洲情侣一区二区无码AV | 国产精品JIZZ在线观看无码| 无码av最新无码av专区| 东京热av人妻无码专区| 爽到高潮无码视频在线观看| 欧洲Av无码放荡人妇网站| 久久亚洲AV成人出白浆无码国产| 亚洲AV无码乱码精品国产| 久久亚洲精品无码网站| 亚洲AV无码专区在线观看成人| 国产办公室秘书无码精品99| 一本久道中文无码字幕av| 国产成人无码免费视频97| 成人麻豆日韩在无码视频| 在线精品自偷自拍无码中文| 日木av无码专区亚洲av毛片| 亚洲av激情无码专区在线播放| 在线观看免费无码专区| 国产成人无码精品久久久久免费 | 无码人妻黑人中文字幕| 成人A片产无码免费视频在线观看| 日韩AV无码不卡网站| 精品无码国产自产拍在线观看蜜 | 久久久久亚洲av无码专区蜜芽 | 无码天堂va亚洲va在线va| 日韩毛片免费无码无毒视频观看| 亚洲AV无码AV男人的天堂不卡|