Redis数据结构之list

redis列表相当于java语言里面的LinkedList,是链表而不是数组,这意味着list的插入和删除操作非常快,时间复杂度o(1),但是索引定位很慢,时间复杂度为o(n),列表中每个元素使用双向指针顺序,支持前向后向遍历

当列表弹出最后一个元素之后,数据结构自动删除,内存被回收

redis列表list常用来做异步队列使用,将需要延后处理的任务结构体序列化成字符串,塞进redis列表,另一个线程从这个列表中轮训数据进行处理

1.list结构的常用指令

队列:
rpush key value1 value2 value3 存储key列表元素

lien key. 当前存储元素数

lpop. key. 从key列表的左边读取列表元素

栈:
rpush key value1. value2 …

pop. key

耗时操作:
linden key. index
时间复杂度o(n). 相当于链表的get(index)

large key 0 -1 获取所有元素

ltrim key start end 获取范围元素,其余丢掉

底层数据结构

redis底层存储并不是简单linkedlist,成为快速链表的一个结构,在列表元素较少情况下,会使用一块连续的内存存储,减少内存碎片化,这个结构式zi plist,压缩列表,将所有的元素彼此紧挨着一起存储,分配的是一块连续内存,当数据量较多的时候,变成quick list链表结构,普通链表需要附加指针空间太大,浪费空间,加重内存碎片化

猜你喜欢

转载自blog.csdn.net/weixin_37632716/article/details/120931362