redis五大數(shù)據(jù)類型底層數(shù)據(jù)結構

我們先來看redis五大數(shù)據(jù)類型,string、list、hash、set、zset

再來看下redis五大數(shù)據(jù)類型用到的數(shù)據(jù)結構

  • 壓縮列表(ziplist):壓縮列表可以看做是特殊的數(shù)組,它也是通過一片連續(xù)的存儲空間來存儲數(shù)據(jù)的。但與數(shù)組要求每個元素占用的空間大小一致不同,壓縮列表允許存儲元素的大小不同。存儲格式為[data_num][data1_len][data1][data2_len][data_2][...],data_num表示了壓縮列表存儲的數(shù)據(jù)數(shù)目,datai_len代表第i個數(shù)據(jù)項的長度,datai則表示具體存儲的數(shù)據(jù)。壓縮列表這樣存儲結構,一方面節(jié)省內存,一方面允許不同類型的數(shù)據(jù)的存儲,比數(shù)組靈活。
  • 整數(shù)數(shù)組(intset)
  • 雙向鏈表(linkedlist)
  • 散列表(hashtable):采用MurmuerHash2哈希算法實現(xiàn),該哈希算法有運行速度快、隨機性好的特點。Redis采用鏈表法來解決哈希沖突。除此之外,Redis支持動態(tài)擴容、縮容。當哈希表的數(shù)據(jù)增多,會導致哈希沖突的鏈表過長,進一步導致查找效率降低,此時哈希表會擴容。反之進行縮容。具體做法為Redis 默認使用了兩個全局哈希表:哈希表 1 和哈希表 2。一開始,當你剛插入數(shù)據(jù)時,默認使用哈希表 1,此時的哈希表 2 并沒有被分配空間,當進行rehash時,給哈希表 2 分配更大的空間,例如是當前哈希表 1 大小的兩倍,然后把哈希表 1 中的數(shù)據(jù)重新映射并拷貝到哈希表 2 中,最后釋放哈希表1的空間。
  • 跳躍表(skiplist):之前介紹過,一個多層的有序鏈表,感興趣的可以前去觀看http://www.itdecent.cn/p/fd233a9d5a87

整數(shù)數(shù)組和雙向鏈表相信大家都比較熟悉,就不過多介紹了。

接下來我們看具體的數(shù)據(jù)類型對應的數(shù)據(jù)結構

string

string的底層實現(xiàn)可以是int、raw、embstr。int 編碼是用來保存整數(shù)值,raw編碼是用來保存長字符串,而embstr是用來保存短字符串。

int,存儲 8 個字節(jié)的長整型(long,2^63-1)。
raw,存儲大于 44 個字節(jié)的字符串(3.2 版本之前是 39 字節(jié))
embstr, 代表 embstr 格式的 SDS(Simple Dynamic String 簡單動態(tài)字符串),存儲小于 44 個字節(jié)的字符串。

list

list底層的數(shù)據(jù)結構可以是ziplist和linkedlist,當列表對象保存的所有字符串元素的長度都小于64字節(jié),且列表保存的元素少于512個,會使用ziplist,否則會使用linkedlist。

set

set的底層是intset或者hashtable,當集合對象保存的所有對象都是整數(shù)值,而且集合對象保存的元素數(shù)量小于512個,會使用intset,否則會使用hashtable。

hash

hash的底層是ziplist或者hashtable,當哈希對象保存的所有鍵值對的鍵和值的字符串長度都小于64字節(jié),且哈希對象保存的鍵值對的數(shù)量小于512個,會使用ziplist,否則使用hashtable。

zset

zset的底層是ziplist或者skiplist,當有序集合的所有元素長度都小于64字節(jié),且有序集合的元素數(shù)量小于128個,會使用ziplist,否則會使用skiplist。

總結

圖1

引用:
https://blog.csdn.net/qq_42956653/article/details/122508570
https://blog.csdn.net/Solo95/article/details/108968393
https://www.imooc.com/article/324827

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容