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)式完成的。