鏈表在Redis中的應用非常廣泛,比如列表鍵的底層實現之一就是鏈表。
除了列表鍵之外,發佈與訂閱、慢查詢、監視器等功能也用到了鏈表,Redis服務器本身還使用鏈表來保存多個客戶端的狀態消息,以及使用鏈表來構建客戶端輸出緩衝區(output buffer)。
3.1 鏈表和鏈表節點的實現
鏈表使用adlist.h/listNode結構來表示。
多個listNode可以通過prev和next指針組成雙端鏈表。
雖然僅使用多個listNode結構就可以組成鏈表,但使用adlist.h/list來持有鏈表的話,操作起來會更方便:
dup函數用於複製鏈表節點所保存的值;
free函數用於釋放鏈表節點所保存的值;
match函數則用於比對鏈表節點所保存的值和另一個輸入值是否相等;
Redis的鏈表的特性總結:雙端、無環、帶表頭指針和表尾指針、帶鏈表長度計數器、多態。
多態:鏈表節點使用void*指針來保存節點值。