redis 基本數據類型-列表(List)


今天不瘦給大家分享一下redis第二個基本數據類型:列表。如果大家了解基本數據結構,相信大家對列表不會陌生,比如在C語言中我們可以使用數組實現一個列表,也可以使用鏈表實現一個列表(列表鏈表傻傻分不清楚,列表是一種抽象數據類型,鏈表為一種實現方式)。

言歸正傳,那redis是怎么實現列表的呢?答案是:雙端雙向無環鏈表(原諒我給起了一個這么復雜的名字,也有人直接叫雙端鏈表)借用《redis設計與實現》中一圖

 

為什么這樣設計呢?主要有如下優點:

  • 雙向:獲取前置節點和后置節點的時間復雜度都為O(1)
  • 首尾兩個指針:從頭和尾取元素時間復雜度都為O(1),從redis同時提供列表兩端的操作命令也得到了印證(lpop和rpop等)
  • 無環: 有環鏈表會導致某些操作變復雜,且應用場景有局限性
  • 長度計數器:使獲取列表長度的時間復雜度為O(1),又是以空間換時間思想的體現

 

注意事項:

一個列表最多可以包含 232 - 1 個元素

redis列表定義為字符換列表,但是基於的雙端雙向循環列表並沒有限定每個節點value的類型

 

參考:

《Redis設計與實現》 

https://redis.io/topics/data-types

 

這里是老瘦家的兒子,如需轉載請聲明,我替老瘦感謝你。


免責聲明!

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



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