Redis

1.指針函數與函數指針

指針函數本質是指針,其返回值是指針。如 float *fun(); 函數指針,本質是指針。如int(*f) (intx);/*聲明一個函數指針*/ ?從直觀上看*號要是和函數名括在一起那么是函數指針 沒有的括在一起的話是指針函數。

2.Redis鏈表類型

I.節點是雙端鏈表

II.鏈表(list)除了有頭指針,尾指針還包括鏈表長度。

3.Redis字典

I.三個重要結構:字典->哈希表->哈希節點

1) 字典包括大小為2的哈希表數組。哈希表結構中又包括哈希表節點數組。哈希節點有后繼節點。即:哈希表節點數組每個元素指向哈希節點鏈表

2) 為了提高插入效率都是在哈希表節點均在前面插入,新插入的節點會成為頭節點。

3)字典中哈希表(一般使用ht[0]進行操作,ht[1]用于rehash。rehash結束后兩個數組交換,并釋放交換后的ht[1]的空間)

4)MurmurHash2算法計算哈希值;地址鏈接法解決hash沖突

II. rehash

1).負載因子=實際哈希節點數 / 哈希節點數組大小 【load_factor = ht[0].used / ht[0].size】。負載因子越大空間開銷越小,查找越慢。

2).觸發時機:

? ? a) 負載因子大于5或者(load_factor >= 1且執行BGSABE或BGREWRITEAOF命令時哈希表擴張。 ??

? ? b)load_factor < 0.1 觸發哈希表收縮。

3).漸進式rehash

? ? a)? 開始期間字典中的rehashIndex字段大于-1,rehash結束rehashIndex重置為-1。

? ? b) rehash期間維護兩個哈希表:查找的時候現在ht[0]中查找,若不成功再去ht[1查找;要是添加的話直接在hash[1]中進行,保證ht[0]只減不增.

4.跳躍表

5.整數集合(intset)

I.有序且不重復

6.壓縮列表(ziplist)

I.節點:previous_enrty_length,encoding,content組成

1)previous_enrty_length 前一個節點的長度

2)encoding:數據類型 + 數據長度

00,10,10開頭表示字節數據類型,11開頭表示為整數。

其中00 開頭表示編碼長度為1字節,后6位表示數組實際長度,且content字節數組長度<=63;

其中01 開頭表示編碼長度為2字節,后14位表示數組實際長度,content字節數組長度<=16383;

其中10開頭表示編碼長度為5字節,后32位表示數組實際長度,content字節數組長度<=4294967295。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 字典 Redis 中的字典 由 dict.h/dict 結構表示: type 和 privdata 是針對不同類型...
    jiangmo閱讀 551評論 2 0
  • 引入 Redis對外提供了5種類型:字符串、列表、集合、有序集合以及哈希表,但底層實現并不是固定的,以上五種數據結...
    宇宙最強架構師閱讀 671評論 0 3
  • 字典,又稱符號表,是保存鍵值對的抽象數據結構。很多語言都內置字典這種常用的數據結構,但是C語言沒有內置,所以red...
    舒小賤閱讀 1,330評論 0 2
  • 寫這篇文章的時候正處于從無錫回南京(家)的高鐵上,看著窗兩側的世界向后快速奔跑;也幻想著推開家門那一刻孩子看我驚訝...
    康莊大道2017閱讀 215評論 0 0
  • 我有個哥哥,盡管我基本上沒有叫過他哥哥,因為他只比我大6個月,我們來自一個族系,本家那種,從小在一個班級,直到初中...
    7f8903e23e9e閱讀 156評論 0 0