zoukankan      html  css  js  c++  java
  • 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(队列)
  • 相关阅读:
    python super()
    git用法小结(1)--建立远程仓库
    git用法小结(1)--建立远程仓库
    Linux下多线程查看工具(pstree、ps、pstack)
    JAVA操作Oracle数据库中的事务
    MyEclipse 2013优化配置【转】
    C语言多线程编程 死锁解析
    在linux终端执行clear或top命令时出现:'xterm' unknown terminal type的错误
    Linux中获取本机网络信息的几个函数及应用
    基于内存的通信之一 “内核共享消息队列”
  • 原文地址:https://www.cnblogs.com/songsongsun/p/14447527.html
Copyright © 2011-2022 走看看