Redis数据结构之列表详解

参考自《Redis开发与运维》

简介

列表类型是用来存储多个有序的字符串,一个列表最多可存储2^32-1个元素,列表结构实际上是双向链表,可以当队列或者栈

特点
  • 列表中的元素是有序的,可以通过下标访问或者某个范围内的元素
  • 列表中的元素可以是重复的
命令介绍

在这里插入图片描述

命令命令描述
rpush key value [value...]右边插入元素,左边插入则是lpush
linsert key before|after pivot value从列表中找到等于pivot的元素,在其前或后插入一个新元素value
lrange key start end获取指定范围内的元素列表,索引下标从左到右为0到N-1,右到左为-1到-N
lindex key index获取指定索引下标的元素
llen key获取列表长度
lpop key从左侧弹出,右侧弹出为rpop
lrem key count value从列表中找到等于value的元素删除,根据count不同分三种情况:count>0,从左到右删除最多count个元素;count=0,删除所有;count<0,从右到左删除最多count绝对值个元素
ltrim key start end按照索引范围修剪列表
lset key index newValue修改指定索引下标的元素
blpop key [key...] timeout阻塞式弹出,还有brpop,列表为空,timeout=0,客户端会一直阻塞,timeout=3,客户端3秒后返回;列表不为空,则阻塞式操作客户端立即返回;

注意:

  1. blpop如果是多个key,则会从左到右遍历每个key,一旦有一个key能弹出元素,客户端立即返回,blpop多个key,最后只会弹出一个key,然后就返回
  2. 如果多个客户端对同一个key执行blpop,那么最先执行blpop命令的客户端可以获取到弹出的值
    在这里插入图片描述
内部编码

列表类型编码有三种:
ziplist(压缩列表)
linkedlist(链表)
quicklist,可以理解为是一个以ziplist为结点的linkedlist,结合了两种优势

使用场景
  1. 消息队列
    lpush+brpop命令组合可以实现阻塞队列,生产者客户端使用lpush从列表左侧添加元素,多个消费者客户端从右侧阻塞式弹出,多个客户端保证了消费的负载均衡和高可用性
  2. 文章列表
    把文章用哈希类型存储,再把文章哈希类型整体作为value插入到列表中,以用户id作为key,这样就可以保存一个用户的所有文章
    注意:lrange命令在列表两端性能比较好,如果列表较大,获取列表中间范围的元素性能会变差,此时可以考虑将列表做二级拆分,或者使用quicklist内部编码实现,获取列表中间范围的元素时也很高效
    列表的使用场景很多:
    lpush+lpop=stack栈
    lpush+rpop=queue队列
    lpush+ltrim=有限集合
    lpush+brpop=阻塞队列

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值