为什么redis命令'llen'具有恒定的时间复杂度而不是o(n)?

yyhrrdl8  于 2021-06-07  发布在  Redis
关注(0)|答案(1)|浏览(404)

我知道redis列表是通过引擎盖下的链表实现的。然而,当计算列表长度的时间复杂度时,它不应该是o(n)吗

zzoitvuj

zzoitvuj1#

可以在以下位置找到列表类型的声明https://github.com/redis/redis/blob/unstable/src/adlist.h. 如果您查看第50行周围的部分,您会发现:

typedef struct list {
    listNode *head;
    listNode *tail;
    void *(*dup)(void *ptr);
    void (*free)(void *ptr);
    int (*match)(void *ptr, void *key);
    unsigned long len;
} list;

注意 unsigned long len 存储列表长度的。这就是为什么 O(1) .

相关问题