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链表结构,普通链表需要附加指针空间太大,浪费空间,加重内存碎片化
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。