溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

redis五種數(shù)據(jù)結(jié)構(gòu)的底層實(shí)現(xiàn)方法

發(fā)布時(shí)間:2021-07-07 11:25:56 來源:億速云 閱讀:128 作者:chen 欄目:互聯(lián)網(wǎng)科技

本篇內(nèi)容主要講解“redis五種數(shù)據(jù)結(jié)構(gòu)的底層實(shí)現(xiàn)方法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“redis五種數(shù)據(jù)結(jié)構(gòu)的底層實(shí)現(xiàn)方法”吧!

實(shí)現(xiàn)方法:1、每種數(shù)據(jù)結(jié)構(gòu)都有自己底層的內(nèi)部編碼實(shí)現(xiàn),而且是多種實(shí)現(xiàn),這樣Redis會在合適的場景選擇合適的內(nèi)部編碼;2、每種數(shù)據(jù)結(jié)構(gòu)都有兩種以上的內(nèi)部編碼實(shí)現(xiàn);3、內(nèi)部編碼可以作為多種外部數(shù)據(jù)結(jié)構(gòu)的內(nèi)部實(shí)現(xiàn)。

本教程操作環(huán)境:windows7系統(tǒng)、Redis5.0.10版、DELL G3電腦。

Redis有五種基本數(shù)據(jù)結(jié)構(gòu):字符串、hash、set、zset、list。下面解釋下載Redis 3.0.6版本中底層是怎樣實(shí)現(xiàn)他們的。

總結(jié)一下

(1)每種數(shù)據(jù)結(jié)構(gòu)都有自己底層的內(nèi)部編碼實(shí)現(xiàn),而且是多種實(shí)現(xiàn),這樣Redis會在合適的場景選擇合適的內(nèi)部編碼。

(2)可以看到每種數(shù)據(jù)結(jié)構(gòu)都有兩種以上的內(nèi)部編碼實(shí)現(xiàn),例如string數(shù)據(jù)結(jié)構(gòu)就包含了raw、int和embstr三種內(nèi)部編碼。

(3)同時(shí),有些內(nèi)部編碼可以作為多種外部數(shù)據(jù)結(jié)構(gòu)的內(nèi)部實(shí)現(xiàn),例如ziplist就是hash、list和zset共有的內(nèi)部編碼。

動(dòng)態(tài)字符串SDS

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

  • 所有非數(shù)字的key, 如:set msg “hello” 中的key msg

  • 字符串?dāng)?shù)據(jù)類型的值,如:set msg “hello” 中的value “hello”

  • 非字符串?dāng)?shù)據(jù)類型中的“字符串值”,如:rpush fruits “apple” “banana"中的"apple” “banana”

SDS長這樣:

redis五種數(shù)據(jù)結(jié)構(gòu)的底層實(shí)現(xiàn)方法

free:還剩多少空間

len:字符串長度

buf:存放的字符數(shù)組

空間預(yù)分配

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

  • 若修改之后SDS長度 < 1MB,則多分配現(xiàn)有l(wèi)en長度的空間

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

惰性空間釋放

為避免縮短字符串時(shí)候的內(nèi)存重分配操作,SDS在數(shù)據(jù)減少時(shí),并不立刻釋放空間。

int

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

set game “111”

雙向鏈表

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

長這樣:

redis五種數(shù)據(jù)結(jié)構(gòu)的底層實(shí)現(xiàn)方法

分兩部分:

  • “統(tǒng)籌部分”:橘黃色

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

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

    • len:雙向鏈表的長度

  • “具體實(shí)施方”:藍(lán)色

    • 有前驅(qū)pre和后繼next

雙向鏈表由 list 和 listNode 兩個(gè)數(shù)據(jù)結(jié)構(gòu)構(gòu)成。

到此,相信大家對“redis五種數(shù)據(jù)結(jié)構(gòu)的底層實(shí)現(xiàn)方法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI