Redis-List类型
Redis–List类型
一、引言
本篇文章就Redis中value的List类型做简单介绍。
二、介绍
List相当于数组或顺序表(并非是一个简单的数组,更接近于双端队列)。lpush(头插)rpush(尾插)lpop(头删)rpop(尾删)。
列表中的元素是有序的(有序指顺序很重要,如果把元素位置颠倒,顺序调换得到新的List和之前的List不等价)
列表中的元素是允许重复的
可以将列表当作栈/队列进行使用,例如:消息队列(Message Queue)
三、命令
1.lpush,lrange
LPUSH:lpush key element[element…]一次可以插入一个元素或多个元素,如果key已经存在,这时使用lpush操作会进行报错
LRANGE:查看list中指定范围的元素(List range)
lrange key start stop
2.lpushx,rpush,rpushx
lpushx:key存在才能插入成功,不存在会失败
rpush:从右侧进行插入,尾插法
rpushx:和lpushx一样,存在才能插入
3.lpop,rpop
lpop:从左边弹出,头弹出
rpop:从右边弹出,尾弹出
4.lindex,linsert,llen
lindex:获取从左数的对应的元素 时间复杂度:O(N)
linsert:linsert key before | after pivot(具体的值) element
存在相同的元素,会执行第一个元素 时间复杂度:O(N)
llen:获取list的长度
5.lrem
lrem key count element
删除元素:count>0从左往右删 count<0 从右往左删 count=0 将所有的该元素删除
6.ltrim,lset
ltrim:ltrim key stary stop 范围保留,这个范围内的都保留,其余的都删除
lset:lset key index element 时间复杂度:O(N)
修改指定位置的元素
7.blpop,brpop
阻塞版本的lpop和rpop
如果list中存在元素,blpop和brpop的作用与lpop和rpop相同
如果list中不存在元素,blpop和brpop就会产生阻塞,一直阻塞到队列存在元素
可以设置阻塞时间,不一定是无休止的等待
如果设置了多个key,那么会从左往右进行遍历键,一旦一个键对应的列表可以弹出元素,命令立即返回
四、内部编码
1.ziplist:压缩列表
列表的元素小于list-max-entries配置(默认512个),列表中每个元素的长度小于64字节
2.linkedlist:链表
便于查找,但是存在一定的内存开销
3.quicklist:redis5之后的编码方式
相当于是链表和压缩列表的结合,整体还是一个链表,链表每个节点是一个压缩列表
五、应用场景
1.用list作为数组这样的结构存储多个元素
2.消息队列
生产者消费者模型:生产者(lpush)消费者(brpop)
3.微博TimeLine
还是将list作为数组进行存储
六、总结
本篇文章简单介绍了value的list类型的相关操作以及相关的应用场景,下一篇文章将介绍redis中的集合set,感谢观看!