主要構成:list結構+listNode結構,Redis鏈表的特性也是和這兩個結構及其各個的屬相字段相關的。
listNode結構
list結構
雖然多個listNode節點就可以連成鏈表,但是引入list結構後,操作活更加的方便,所有redis的鏈表一般是如下圖所示:
從上面的鏈表結構圖,我們可以輕易的總結出鏈表的特點
1:雙端。listNode節點之間是一個雙向鏈表,即每一個節點都有next和pre指針,這樣就可以將獲取某個節點的前驅或者後繼值的複雜度降爲O(1)。
2:list結構中含有head和tail指針,這樣對鏈表頭節點和尾節點的獲取的時間複雜度爲O(1)。
3:list結構中含有len,這樣對鏈長度的獲取的時間複雜度爲O(1)。(有點類似於sds中獲取長度)
4:無環。即不是循環的。這樣對鏈表的遍歷的中止條件是以NULL中止。注意和循環雙向鏈表的區別。
5:多態:list結構含有三個特定函數,執行對應的特定操作。