带你一起玩转Redis 的 List 数据类型

发布于:2023-01-19 ⋅ 阅读:(262) ⋅ 点赞:(0)

👉大家好,我是:知识的搬运工旺仔

👉认真分享技术,记录学习过程的点滴,如果我的分享能为你带来帮助,请支持我奥🍻

👉你的支持,是我每天更新的动力。

👉赞点:👍 留言:✍ 收藏:⭐

👉个人格言:想法一步一步的落实,才是你我前进最佳选择。

1. List 数据类型的简单介绍

  1. 可以简单的看作字符串列表
  2. 列表按照插入的顺序排序
  3. 可以将元素插入到列表的头部和尾部
  4. 列表可以模拟栈数据类型,也可以模拟队列数据类型
  5. 一个队列最大储存量是2^32-1个元素

2. 向 List 中插入值

LPUSH key value [value…]

:::success LPUSH 命令:将多个值插入列表头部

  1. 插入多个值,list 将按照从左到右的顺序依次插入
  2. key 不存在,先创建一个空列表,然后再执行LPUSH 命令
  3. key 存在,但不是列表类型,将会报错 :::

RPUSH key valus [value…]

:::success RPUSH 命令:将多个值插入列表尾部

  1. 插入多个值,list 将按照从右到左的顺序依次插入
  2. key 不存在,先创建一个空列表,然后再执行RPUSH 命令
  3. key 存在,但不是列表类型,将会报错 :::

LINSERT key before | after pivot value

:::success LINSERT 命令:插入一个值到列表中

  1. 插入一个在 pivot 值 之前或之后的值
  2. 当 pivot 这个值不存在时,执行该命令无效
  3. key 不存在,看作空列表,执行该命令无效
  4. key 存在,但不是列表类型,将会报错 :::

LPUSHX key value

:::success LPUSHX 命令:将值插入列表头部

  1. key 必须存在,并且是列表
  2. key不存在,它什么都不做,不会创建新的列表 :::

RPUSHX key value

:::success RPUSHX 命令:将值插入列表尾部

  1. key 必须存在,并且是列表
  2. key不存在,它什么都不做,不会创建新的列表 :::

LSET key index value

:::success LSET 命令:修改列元素值

  1. 设置下标为index 的列表key 的值为value
  2. index 超出范围,会报错
  3. key 用空,也会报错 :::

3. 获取列元素

LLEN key

:::success LLEN 命令:统计列表长度

  1. 简单说,就是统计key的长度
  2. key 不存在,视为空列表,返回0
  3. key 不是列表类型,返回错误 :::

LINDEX key index

:::success LINDEX 命令:获取列表元素值

  1. 获取key中下标为index 的元素值
  2. index 从 0 开始
  3. index 是 -1 表示:从列表中最后一个元素的下标
  4. key 不存在,返回一个错误 :::

LRANGE key start end

:::success LRANGE 命令:获取列表指定区间内的元素

  1. 区间从start 开始 ,从 end 结束
  2. 0 表示第一个元素,-1表示最后一个元素
  3. start 和 end 的值超出下标,不会引起错误
  4. start 大于 end ,返回一个空列表
  5. end > 列表长度,Reids 将end作为列表最新的最大长度 :::

4. 删除列表元素

LPOP key

:::success LPOP 命令:返回并删除列表的头元素

  1. key 存在,从左边开始返回,这里默认左边是头,右边是尾部
  2. key 不存在,返回nil :::

RPOP key

:::success RPOP 命令:返回并删除列表的尾元素

  1. key 存在,从右边开始返回,这里默认左边是头,右边是尾部
  2. key 不存在,返回nil :::

BLPOP key [key…] timeout

:::success BLPOP 命令:在指定时间内删除列表的头元素

  1. 它是列表阻塞式弹出原语,是LPOP 的阻塞版本
  2. key 中没有任何元素时, 执行 BLPOP 命令,会在 timeout 内进行等待,在 timeout 时间内,key中插入值,这个值将会弹出
  3. 多个key ,会按照key 出现的顺序 依次检查各个列表,弹出第一个非空列表的头元素
  4. timeout = 0 时,这个阻塞时间可以无线延长 :::

BLRPOP key [key…] timeout

:::success BLPOP 命令:在指定时间内删除列表的尾元素

  1. 它是列表阻塞式弹出原语,是RPOP 的阻塞版本
  2. key 中没有任何元素时, 执行 BRPOP 命令,会在 timeout 内进行等待,在 timeout 时间内,key中插入值,这个值将会弹出
  3. 多个key ,会按照key 出现的顺序 依次检查各个列表,弹出第一个非空列表的头元素
  4. timeout 为 0 时,这个阻塞时间可以无线延长
  5. timeout 的单位是秒 :::

LREM key count value

:::success LREM 命令:删除指定个数的元素

  1. 删除列表key 中与指定参数valus 相等 且个数为count 数量的值
  2. count = 0 ,删除列表中所有 与 value 相等的元素
  3. count >0 ,列表尾部,(就是右边)开始 删除count 数量的 value 的值
  4. count <0 ,列表头部,(就是左边)开始 删除count 数量的 value 的值 :::

LTRIM key start stop

:::success LTRIM 命令:在指定区间内修剪列表

  1. 去除不必要的空格
  2. 让列表值保留指定区间内的元素,在这区间内的元素,将会删除
  3. start 和 stop 的默认值都是 0
  4. key 不是 列表数据类型,返回一个错误
  5. start 和 stop 超出下标,不会引起错误
  6. start > end ,将会清空列表,返回一个空列表
  7. stop > 列表长度,Reids 将stop 作为列表最新的最大长度 :::

5. 移动列表

RPOPLPUSH source destination

:::success RPOPLPUSH 命令:将列表元素移动到另一个列表中

  1. 会在一个原子时间内,将列表source 中的队尾的第一个元素弹出,并插入到另一个列表对头的第一个元素
  2. source 不存在,返回nil ,后边的操作将不在执行
  3. scource 和 destination 指的是 key 的名称
  4. scource 和 destination 相同,列表的尾元素将移动到列表头 :::

BRPOPLPUSH source destination timeout

:::success BRPOPLPUSH 命令:在指定时间内移动列表元素到另一个列表

  1. BRPOPLPUSH 命令是 RPOPLUSH 命令的阻塞版本
  2. source 不存在,BRPOPLPUSH 命令将阻塞等待 timeout 时间
  3. 在 timeout 时间范围内,scource 里边从没有元素到有元素之后,就会该移动命令
  4. timeout 的单位是秒
  5. timeout = 0 时,这个阻塞时间可以无线延长 :::

6. 列表模式

6.1 安全队列

  1. List 数据结构,经常被看作一个队列,用户不同程序之间有序交换信息

  2. 一个客户端通过LPUSH 将消息放入队列,另一个客户端用RPOP 或者 BRPOP 获取信息

  3. 该队列不安全,当接收消息的客户端接收消息到一半,客户端出现崩溃,消息将会丢失

  4. 使用RPOPLPUSH 能解决 未处理完的消息丢失的问题

    1. RPOPLPUSH 命令在返回一个消息的同时,会把这条消息保存在另一个队列中
    2. 这样就保证了,消息不会因为,接口方突然出现奔溃而导致消息丢失
    3. 处理完消息后,我们可以使用LREM 删除,备份的消息
  5. 添加一个客户端监视列表,这个客户端,会自动将超过一定处理时间的消息备份到这个列表中,保证消息不会丢失

6. 2 循环列表

  1. 使用RPOPLPUSH 命令可以实现循环列表
  2. 使 source 和 diestination 的 key 是相同的,就可以实现一个循环列表
  3. 多个客户端,可以对同一个循环列表进行旋转操作,来获取不同的元素
  4. 有客户端在队尾添加元素时,循环列表也能正常工作
  5. 我们借助Redis 实现服务器监控系统,实现在短时间内连接不断地处理一些消息
  6. 循环列表模式是安全的,它易于拓展,遇到客户端奔溃,消息也不会丢失

🎈看完了不妨给我点个赞吧,👉你的支持,是我每天更新的动力…

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到