前言:
閱讀 redis設計與實現 一書的記錄。未完待續。。。
redis我們都知道有5種數據類型,分別是string,list,hash,set,zset,那么你知道它們的底層數據結構實現嗎?
redis底層有6種數據結構,分別是簡單動態字符串(SDS),鏈表,字典,跳躍表,整數集合,壓縮列表。
每種數據類型都有着2種以上的數據結構實現,在不同狀態下會進行數據結構的轉換。現在來看看這6種數據結構是什么吧!
1.簡單動態字符串(SDS)

2.鏈表

3.字典


其中漸進式hash能有效解決重新分配hash表帶來的服務器停頓問題,不一次性把所有的數據遷移到新的hash表上,而是每次增加,刪除,修改后把一個index上的所有數據移動到新hash表中。
過程如下:

4.跳躍表


每個節點的生成都會隨機產生1到32個層,來給前面的節點來”跳躍“
5.整數集合

當編碼方式不足以應對過大的整數時,會調整編碼方式,把在整數集合里的數的編碼調整為新的編碼方式,再把需要加入的大整數加入進來。編碼方式只能升級不能降級。
6.壓縮列表


壓縮鏈表由於保留了前面節點的長度和最后節點的位置,能夠有效的向后遍歷,但不足之處就是調整了一個節點的大小可能會形成羊群效應,因為節點保留了前面節點的長度,大小改變時,后面節點需要做出相應調整。
第二部分,各個數據類型的數據結構

