• Redis基本数据结构之List


    List (列表)

    列表(list)类型是用来存储多个 有序字符串。在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围元素列表、获取 指定索引下标元素 等。

    列表 是一种比较 灵活数据结构,它可以充当 队列 的角色,在实际开发上有很多应用场景。

    如图所示,a、b、c、d、e 五个元素 从左到右 组成了一个 有序的列表,列表中的每个字符串称为 元素(element),一个列表最多可以存储 2 ^ 32 - 1 个元素。

    • 列表的 插入弹出 操作

    • 列表的 获取截取删除 操作

    1相关命令

    从右边插入元素

    命令为: rpush key value [value ...]

    (1) 从左边插入元素

    命令为: lpush key value [value ...]

    使用方法和 rpush 相同,只不过从 左侧插入

    (2) 向某个元素前或者后插入

    命令为: linsert key before|after pivot value

    linsert 命令会从 列表 中找到 第一个 等于 pivot 的元素,在其 前(before)或者 后(after)插入一个新的元素 value,例如下面操作会在列表的 元素 b 前插入 redis:

    返回的结果代表列表的长度

    (3) 获取列表指定索引下标的元素

    命令为: lindex key index

    (4) 获取列表长度

    命令为: llen key

    (5) 从左侧或右侧弹出元素

    从左侧弹出命令为: lpop key

    从右侧弹出命令为: rpop key

    (6) 删除指定元素

    命令为: lrem key count value

    lrem 命令会从 列表 中找到 等于 value 的元素进行 删除,根据 count 的不同分为三种情况:

    • count > 0从左到右,删除最多 count 个元素。
    • count < 0从右到左,删除最多 count绝对值 个元素。
    • count = 0删除所有

    例如向列表 从左向右 插入 5 个 a,那么当前 列表 变为 “a a a a a redis b ”,下面操作将从列表 左边 开始删除 4 个为 a 的元素:

    (7) 按照索引列表修剪列表

    命令为: ltrim key start stop

    (8) 阻塞弹出命令

    向左阻塞弹出命令: blpop key [key ...] timeout

    向右阻塞弹出命令: brpop key [key ...] timeout

    blpop 和 brpop 是 lpop 和 rpop 的 阻塞版本,它们除了 弹出方向 不同,使用方法 基本相同,所以下面以 brpop 命令进行说明, brpop 命令包含两个参数:

    • key[key...]:一个列表的 多个键
    • timeout阻塞 时间(单位:)。

    对于 timeout 参数,要氛围 列表为空不为空 两种情况:

    l 列表为空

    如果 timeout = 3,那么 客户端 要等到 3 秒后返回,如果 timeout = 0,那么 客户端 一直 阻塞 等下去,如果在此期间添加了数据,客户端会立即返回

    l 列表不为空

    客户端会 立即返回。

    (9) 命令时间复杂度

    2 应用场景

    消息队列

    通过 Redis 的 lpush + brpop 命令组合,即可实现阻塞队列。如图所示:

    生产者客户端 使用 lrpush 从列表 左侧插入元素,多个消费者客户端使用 brpop 命令阻塞式的“抢”列表 尾部 的元素,多个客户端保证了消费的负载均衡高可用性

    (10) 其他场景

    命令组合 对应数据结构
    lpush + lpop Stack(栈)
    Lpush + rpop Queue(队列)
  • 相关阅读:
    mac访达中的位置
    ResponseEntity和@ResponseBody以及@ResponseStatus区别
    Spring Boot中进行Junit测试
    添加数据库时出现time zone无法识别问题
    HTTPS
    表达式求值
    《进击JavaScript核心》学习笔记
    GitLab领取任务+建立分支+本地修改+上传分支+合并分支详细步骤
    黑苹果使用感受和常见问题注意事项!
    JS进阶练习
  • 原文地址:https://www.cnblogs.com/songsongsun/p/14447527.html
Copyright © 2020-2023  润新知