特点
适⽤场景:消息队列。
它的特点就是内部元素有序、重复,并且插⼊和删除很快 O(1) ,但是查找却很慢 O(n) 。功能⽀持队列和栈操作。
具体服务器操作命令
左侧插⼊元素: LPUSH [key] [value1] … [valueN]
右侧插⼊元素: RPUSH [key] [value1] … [valueN]
左侧弹出元素: LPOP [key]
右侧弹出元素: RPOP [key]
查看队列⻓度: LLEN [key]
查询列表中下标为index的元素值: LINDEX [key] [index]
按范围查看队列信息: LRANGE [key] [start_index] [end_index]
仅保留某区间的列表,其余元素全被删除: LTRIM [key] [start_index] [end_index]
具体操作
使用压缩链表与双向链表进行存储
压缩链表:每个列表节点保存⼀个列表中的元素
当我们执⾏ RPUSH testlist a b c 之后,其数据结构如下
双向链表:每个节点保存⼀个元素
编码转换规则:
同时满⾜⼀下两个条件时,就是 ziplist 类型,否则是 linkedlist 类型
【条件1】列表中所有元素⻓度都⼩于 65 字节。
【条件2】列表中元素的个数⼩于 512 个
应用场景
例如:微博消息与微信公众号消息 因为消息从会不断地添加与更新,因此使用链表的方式进行从左向右存储,拿取数据从左向右遍历获取最新消息