Redis——相關(guān)數(shù)據(jù)結(jié)構(gòu)

strings:字符串

  • SDS(simple dynamic string):自己構(gòu)建的一種簡(jiǎn)單動(dòng)態(tài)字符串的抽象類型,并且是Redis的默認(rèn)字符串表示。

struct sdshdr{
int len;//保存的字符串長(zhǎng)度
int free;//未使用的字節(jié)數(shù)量
cahr buf[];//字節(jié)數(shù)組
}

  • 常數(shù)復(fù)雜度獲取字符串長(zhǎng)度
  • 杜絕緩存區(qū)溢出
  • 減少修改字符串時(shí)帶來(lái)的內(nèi)存重分配次數(shù)
  • 二進(jìn)制安全
  • 兼容部分C字符串函數(shù)
  • C字符串:作為字符串字面量,用在一些無(wú)須對(duì)字符串值進(jìn)行修改的地方,例如打印日志。

LinkedList:鏈表

  • 鏈表在Redis中的應(yīng)用非常廣泛,列表鍵list的底層實(shí)現(xiàn)之一就是鏈表。
  • 特性:
  • 雙端
  • 無(wú)環(huán)
  • 帶表頭指針和表尾指針
  • 帶鏈表長(zhǎng)度計(jì)數(shù)器
  • 多態(tài):可以保存不同類型的值

map:字典、映射

  • 場(chǎng)景:

  • Redis的數(shù)據(jù)庫(kù)就是使用字典來(lái)作為底層實(shí)現(xiàn)的,對(duì)數(shù)據(jù)庫(kù)的增刪該查操作也構(gòu)建在對(duì)字典的操作之上的。

  • 字典還是哈希鍵的底層實(shí)現(xiàn)之一, 鍵值對(duì)較多or元素都是比較長(zhǎng)的字符串時(shí)會(huì)選用。

  • 特性:

  • Redis中的字典使用hash表作為底層實(shí)現(xiàn),每個(gè)字典帶有兩個(gè)哈希表,一個(gè)平時(shí)使用,一個(gè)僅在進(jìn)行rehash時(shí)使用。

  • 使用MurmurHash算法計(jì)算key的哈希值

  • 使用鏈地址法解決hash沖突——單向鏈表

  • 進(jìn)行擴(kuò)展和收縮時(shí),rehash是漸進(jìn)式完成的。

skiplist:跳躍表

sorted sets:有序集合

bitmaps:位圖

hyperloglogs

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容