Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Data structures Redis列表如何允许索引和固定时间的左右推/弹出?_Data Structures_Redis - Fatal编程技术网

Data structures Redis列表如何允许索引和固定时间的左右推/弹出?

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

redis列表实现了什么样的内部数据结构来允许这种情况?链表需要O(n)索引,数组需要O(n)左/右推/弹出。

根据上下文,它们被实现为
链表

Redis列表是通过链表实现的。这意味着,即使列表中有数百万个元素,在列表的开头或结尾添加新元素的操作也会在固定时间内执行。使用LPUSH命令向包含10个元素的列表头添加新元素的速度与向包含1000万个元素的列表头添加元素的速度相同

缺点是什么?在用数组实现的列表中,按索引访问元素的速度非常快(常数时间索引访问),而在用链表实现的列表中,按索引访问元素的速度则不太快(在链表中,操作需要与所访问元素的索引成比例的工作量)

正因为如此,
LPOP
/
RPOP
LPUSH
/
PUSH
时间复杂度是
O(1)
,因为它们处理的是正面/反面。而
LINDEX
s的时间复杂度是
O(N)