Redis深度歷險-緊湊列表

緊湊列表

Redis5.0又引入了新的數據結構listpack,是在壓縮列表基礎上的改進,整體有所類似,緊湊列表解決了一個很重要的問題:級聯更新;Redis深度歷險-壓縮列表 - 簡書 (jianshu.com)

級聯更新

在緊湊列表中的prevlen有1字節長和5字節長兩種情況,在插入紅色元素時也有兩種情況:

  1. 紅色節點元素小於254字節,只需要更新黃色節點的prevlen即可
  2. 紅色節點元素大於254字節,黃色節點需要擴容prevlen並更新數據

在上述第2種情況發生時,也有兩種情況:

  1. 黃色元素擴容後依舊小於254字節,只需要更新綠色節點的prevlen即可
  2. 黃色元素擴容後大於254字節,綠色元素則也需要擴容prevlen

如果有多個接近於254字節的元素,就會造成級聯更新了

緊湊列表的內存排布

  • total_bytes:總長度
  • size:元素個數
  • entry:元素
    • encoding:編碼方式,同樣支持很多種
    • content:內容
    • length:本元素長度

緊湊列表每個元素尾部存儲了當前元素的長度,元素長度結合total_bytes就可以實現從後往前的遍歷,不同元素的內容解耦開了,不再會發生級聯更新的問題了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章