链表被广泛用于实现Redis的各种功能,比如列表键、发布与订阅、慢查询、监视器等。
定义
1 | typedef struct listNode { |
多个这样的 listNode
节点形成一个双向链表,并且在Redis中使用了 list
结构来管理这个双向两边,使得操作更加方便
1 | typedef struct list { |
特性
- 无环双向链表,获取头节点和尾节点的时间复杂度为 O(1)
- 使用
len
属性计数,获取链表长度的时间复杂度为 O(1) - 多态,
listNode
的value
属性类型是void*
,并且可以通过list结构的dup、free、match三个属性为节点值设置类型特定函数,所以Redis的链表可以用于保存各种不同类型的值。
实现相对较为简单
参考 《Redis设计与实现》