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 获取所有元素
扫描二维码关注公众号,回复:
13289399 查看本文章

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