Data structures Redis列表如何允许索引和固定时间的左右推/弹出?
redis列表实现了什么样的内部数据结构来允许这种情况?链表需要O(n)索引,数组需要O(n)左/右推/弹出。根据上下文,它们被实现为Data structures Redis列表如何允许索引和固定时间的左右推/弹出?,data-structures,redis,Data Structures,Redis,redis列表实现了什么样的内部数据结构来允许这种情况?链表需要O(n)索引,数组需要O(n)左/右推/弹出。根据上下文,它们被实现为链表 Redis列表是通过链表实现的。这意味着,即使列表中有数百万个元素,在列表的开头或结尾添加新元素的操作也会在固定时间内执行。使用LPUSH命令向包含10个元素的列表头添加新元素的速度与向包含1000万个元素的列表头添加元素的速度相同 缺点是什么?在用数组实现的列表中,按索引访问元素的速度非常快(常数时间索引访问),而在用链表实现的列表中,按索引访问元素的速度
链表
Redis列表是通过链表实现的。这意味着,即使列表中有数百万个元素,在列表的开头或结尾添加新元素的操作也会在固定时间内执行。使用LPUSH命令向包含10个元素的列表头添加新元素的速度与向包含1000万个元素的列表头添加元素的速度相同
缺点是什么?在用数组实现的列表中,按索引访问元素的速度非常快(常数时间索引访问),而在用链表实现的列表中,按索引访问元素的速度则不太快(在链表中,操作需要与所访问元素的索引成比例的工作量)
正因为如此,LPOP
/RPOP
或LPUSH
/PUSH
时间复杂度是O(1)
,因为它们处理的是正面/反面。而LINDEX
s的时间复杂度是O(N)