redis常用數據類型對應的數據結構


redis的數據類型都是通過多種數據結構來實現,主要是出於時間和空間的考慮,當數據量小的時候通過數組下標訪問最快,占用內存最小【壓縮列表是數組的變種,允許存儲的數據大小不同

因為數組需要占用連續的內存空間,所以當數據量大的時候,就需要使用鏈表,同時為了保證速度又需要和數組結合,也就有了散列表。

1、字符串

2、列表(list):支持存儲一組數據,這種數據類型對應兩種實現方法,一種是壓縮列表,另一種是雙向循環鏈表

壓縮列表:數據集比較少的時候,采用壓縮列表

redis自己設計的一種存儲結構,類似數組,通過一片連續的內存空間來存儲數據,但它允許存儲的數據大小不同

條件:

  • 列表中保存的單個數據小於64個字節
  • 列表中數據個數少於512個

優點:

  • 節省內存
  • 支持不同類型數據的存儲
  • 數據存儲在一片連續的內存空間,通過鍵來獲取值為列表類型的數據,讀取效率也非常高。
雙向循環鏈表:數據量比較大時,列表使用雙向循環鏈表實現
 
3、字典(hash):存儲一組 數據對,每個數據對又包含鍵值兩部分。

壓縮列表:數據集比較少的時候,采用壓縮列表

條件:

  • 列表中保存的鍵和值的大小都小於64個字節
  • 列表中鍵值對個數少於512個

散列表:數據量比較大,不滿足上述條件,使用散列表實現。

redis使用MurmurHash2這種運行速度快,隨機性好的哈希算法作為哈希函數,對於哈希沖突,redis使用鏈表法來解決。

redis支持散列表的動態擴容、縮絨。

4、集合(set):一種是基於有序數組,一種是基於散列表

有序數組:

條件:

  • 存儲的數據都是整數
  • 存儲的數據元素個數不超過512個

散列表:

5、有序集合(sort set):

用來存儲一組數據,並且每個數據會附帶一個得分。通過得分的大小,我們將數據組織成跳表這樣的數據結構,以支持快速地按照得分值、得分區間獲取數據。

壓縮列表:數據集比較少的時候,采用壓縮列表 

條件:

  • 保存的數據小於64個字節
  • 元素個數小於128個

跳表:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM