strings:字符串
- SDS(simple dynamic string):自己構(gòu)建的一種簡單動(dòng)態(tài)字符串的抽象類型昧廷,并且是Redis的默認(rèn)字符串表示。
struct sdshdr{
int len;//保存的字符串長度
int free;//未使用的字節(jié)數(shù)量
cahr buf[];//字節(jié)數(shù)組
}
- 常數(shù)復(fù)雜度獲取字符串長度
- 杜絕緩存區(qū)溢出
- 減少修改字符串時(shí)帶來的內(nèi)存重分配次數(shù)
- 二進(jìn)制安全
- 兼容部分C字符串函數(shù)
- C字符串:作為字符串字面量甚侣,用在一些無須對(duì)字符串值進(jìn)行修改的地方,例如打印日志间学。
LinkedList:鏈表
- 鏈表在Redis中的應(yīng)用非常廣泛殷费,列表鍵list的底層實(shí)現(xiàn)之一就是鏈表。
- 特性:
- 雙端
- 無環(huán)
- 帶表頭指針和表尾指針
- 帶鏈表長度計(jì)數(shù)器
- 多態(tài):可以保存不同類型的值
map:字典低葫、映射
場景:
Redis的數(shù)據(jù)庫就是使用字典來作為底層實(shí)現(xiàn)的详羡,對(duì)數(shù)據(jù)庫的增刪該查操作也構(gòu)建在對(duì)字典的操作之上的。
字典還是哈希鍵的底層實(shí)現(xiàn)之一嘿悬, 鍵值對(duì)較多or元素都是比較長的字符串時(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)式完成的蟹漓。