redis数据类型(列表)

  • 是一个双端链表结构,容量是2^32-1的元素

  • 对两端的操作想能很高,通过索引下标操作中间节点的性能较差

  • 列表的元素类型为string的,按照插入的顺序排序,在列表的头部或尾部添加元素

  • 如果键不存在,创建新的链表;如果键已存在,新增内容;如果值全移除,对应的键也就消失了。

命令

设置

  • 在头部插入

lpush 键 值 值 ...
  • 在尾部插入

rpush 键 值 值 ...
  • 在一个元素的前或后插入新元素

linsert 键 before|after pivot 原值 新值
  • 设置指定索引的元素值

    • 索引从0开始
      索引可以是负数,表示偏移量从list的尾部开始
      -1表示最后一个元素

lset 键 索引 值

获取

  • 移除并返回key对应的list的第一个元素

lpop
  • 移除并返回key对应的list的最后一个元素

rpop
  • 返回存储在key的列表中的指定范围的元素

    • 两个索引都是从0开始,偏移量可以是负数

lrange 键 索引1 索引2

其他

  • 裁剪列表,改为原集合的一个子集

    • 索引是从0开始的,可以是负数

ltrim 键 索引1 索引2
  • 返回存储在key里的list的长度

llen
  • 返回列表中索引对应的值

lindex 键 索引

阻塞式操作

  • 当列表中没有元素时blpop/brpop将阻塞在这里,直到等待超时或发现可弹出元素,设置多个键时会逐一去每个键中获取值

# 从左弹出
blpop key key timeout
# 从右右弹出
brpop key key timeout
  • 将第一个key中的值加入到第二个key中,如果第一个key没有值,将会阻塞,直到等待超时或发现可弹出元素

brpoplpush key key timeout   

应用场景

  • 粉丝列表

# 将粉丝加入到列表中
lpush fans 名
# 显示粉丝
lrange
  • 时间轴

# 存入的信息
lpush
# 查询的信息,最新的会在最上面
lrange
  • 最新文章

# 存入的信息
lpush
# 查询的信息,最新的会在最上面 
lrange
  • 消息队列

    • 消费者等待着,当生产者产生数据时,消费者就可以获取数据并进行处理

# 阻塞等待队列中推送数据
# 将依次获取到推送的1、2、3
blpop queue:1
# 推送数据
rpush queue:1 1
rpush queue:1 2
rpush queue:1 3
  • 消息订阅场景

# 设置用户订阅的消息内容
lpush likearticle:user1  message1 message2
# 获取用户订阅的前10条消息
lrange likearticle:user1 0 9
# 获取用户订阅的所有条消息
lrange likearticle:user1 0 -1