1.指針函數(shù)與函數(shù)指針
指針函數(shù)本質(zhì)是指針,其返回值是指針。如 float *fun(); 函數(shù)指針,本質(zhì)是指針。如int(*f) (intx);/*聲明一個(gè)函數(shù)指針*/ ?從直觀上看*號(hào)要是和函數(shù)名括在一起那么是函數(shù)指針 沒有的括在一起的話是指針函數(shù)。
2.Redis鏈表類型
I.節(jié)點(diǎn)是雙端鏈表
II.鏈表(list)除了有頭指針,尾指針還包括鏈表長度。
3.Redis字典
I.三個(gè)重要結(jié)構(gòu):字典->哈希表->哈希節(jié)點(diǎn)
1) 字典包括大小為2的哈希表數(shù)組。哈希表結(jié)構(gòu)中又包括哈希表節(jié)點(diǎn)數(shù)組。哈希節(jié)點(diǎn)有后繼節(jié)點(diǎn)。即:哈希表節(jié)點(diǎn)數(shù)組每個(gè)元素指向哈希節(jié)點(diǎn)鏈表
2) 為了提高插入效率都是在哈希表節(jié)點(diǎn)均在前面插入,新插入的節(jié)點(diǎn)會(huì)成為頭節(jié)點(diǎn)。
3)字典中哈希表(一般使用ht[0]進(jìn)行操作,ht[1]用于rehash。rehash結(jié)束后兩個(gè)數(shù)組交換,并釋放交換后的ht[1]的空間)
4)MurmurHash2算法計(jì)算哈希值;地址鏈接法解決hash沖突
II. rehash
1).負(fù)載因子=實(shí)際哈希節(jié)點(diǎn)數(shù) / 哈希節(jié)點(diǎn)數(shù)組大小 【load_factor = ht[0].used / ht[0].size】。負(fù)載因子越大空間開銷越小,查找越慢。
2).觸發(fā)時(shí)機(jī):
? ? a) 負(fù)載因子大于5或者(load_factor >= 1且執(zhí)行BGSABE或BGREWRITEAOF命令時(shí)哈希表擴(kuò)張。 ??
? ? b)load_factor < 0.1 觸發(fā)哈希表收縮。
3).漸進(jìn)式rehash
? ? a)? 開始期間字典中的rehashIndex字段大于-1,rehash結(jié)束rehashIndex重置為-1。
? ? b) rehash期間維護(hù)兩個(gè)哈希表:查找的時(shí)候現(xiàn)在ht[0]中查找,若不成功再去ht[1查找;要是添加的話直接在hash[1]中進(jìn)行,保證ht[0]只減不增.
4.跳躍表
5.整數(shù)集合(intset)
I.有序且不重復(fù)
6.壓縮列表(ziplist)
I.節(jié)點(diǎn):previous_enrty_length,encoding,content組成
1)previous_enrty_length 前一個(gè)節(jié)點(diǎn)的長度
2)encoding:數(shù)據(jù)類型 + 數(shù)據(jù)長度
00,10,10開頭表示字節(jié)數(shù)據(jù)類型,11開頭表示為整數(shù)。
其中00 開頭表示編碼長度為1字節(jié),后6位表示數(shù)組實(shí)際長度,且content字節(jié)數(shù)組長度<=63;
其中01 開頭表示編碼長度為2字節(jié),后14位表示數(shù)組實(shí)際長度,content字節(jié)數(shù)組長度<=16383;
其中10開頭表示編碼長度為5字節(jié),后32位表示數(shù)組實(shí)際長度,content字節(jié)數(shù)組長度<=4294967295。