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


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

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

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

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

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

    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. 循环列表模式是安全的,它易于拓展,遇到客户端奔溃,消息也不会丢失

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

  • 相关阅读:
    剩余参数和展开运算符的区别
    如何做好供应商绩效管理?
    Nacos是怎样实现配置动态更新的?如何动态更新bean?
    科创人·数智思维私董会番外篇:思考需要私烤| 活动回顾
    (BGV12)方案初学
    409. 最长回文串
    测试服务器的udping值
    揭秘百度智能测试在测试分析领域实践
    Mysql_Note3
    基于单片机的土壤温湿度控制系统
  • 原文地址:https://blog.csdn.net/weixin_46213083/article/details/126323371