redis 基本資料型別-列表(List)
阿新 • • 發佈:2018-12-19
今天不瘦給大家分享一下redis第二個基本資料型別:列表。如果大家瞭解基本資料結構,相信大家對列表不會陌生,比如在C語言中我們可以使用陣列實現一個列表,也可以使用連結串列實現一個列表(列表連結串列傻傻分不清楚,列表是一種抽象資料型別,連結串列為一種實現方式)。
言歸正傳,那redis是怎麼實現列表的呢?答案是:雙端雙向無環連結串列(原諒我給起了一個這麼複雜的名字,也有人直接叫雙端連結串列), 借用《redis設計與實現》中一圖
為什麼這樣設計呢?主要有如下優點:
- 雙向:獲取前置節點和後置節點的時間複雜度都為O(1)
- 首尾兩個指標:從頭和尾取元素時間複雜度都為O(1),從redis同時提供列表兩端的操作命令也得到了印證(lpop和rpop等)
- 無環: 有環連結串列會導致某些操作變複雜,且應用場景有侷限性
- 長度計數器:使獲取列表長度的時間複雜度為O(1),又是以空間換時間思想的體現
注意事項:
一個列表最多可以包含 232 - 1 個元素
redis列表定義為字元換列表,但是基於的雙端雙向迴圈列表並沒有限定每個節點value的型別
參考:
《Redis設計與實現》
https://redis.io/topics/data-types
這裡是老瘦家的兒子,如需轉載請宣告,我替老瘦感謝你。