• 速通Redis基础(三):掌握Redis的列表类型和命令


    目录

    Redis列表类型

    Redis列表的基本命令

    LPUSH

    LPUSHX

    RPUSH

    RPUSHX

    LRANGE

    LPOP

    RPOP

    LINDEX

    LINSERT

    LLEN

    阻塞版本命令

    BLPOP

    BRPOP

    Redis的列表命令小结


    Redis是一种高性能、开源的NoSQL数据库,以其支持多种数据类型而闻名。在前两篇博客中,我们介绍了Redis的字符串和哈希类型。今天,我们将深入研究Redis的另一种重要数据类型——列表(List)以及相关命令。

    Redis列表类型

    Redis的列表是一个有序的数据集合,可以包含重复的元素。它类似于其他编程语言中的数组,但有一些特定的功能和命令使其非常有用。以下是Redis列表的一些关键特性:

    1. 有序性:列表中的元素保持插入顺序,这使得列表非常适合实现队列、堆栈和其他需要有序数据的场景。

    2. 允许重复元素:与集合不同,列表允许包含相同的元素多次。

    3. 支持快速的头尾插入和删除:Redis的列表操作非常高效,可以在常量时间内在列表的头部和尾部插入或删除元素。

    4. 适用范围广泛:列表可用于实现消息队列、最近浏览、时间线和更多应用。

    Redis列表的基本命令

    LPUSH

    将⼀个或者多个元素从左侧放入(头插)到 list 中。

    语法:

     LPUSH key element [element ...]

    时间复杂度:只插入⼀个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数

    返回值:插入后 list 的长度。

    示例:

    嗯?问题来了,为什么不是1234,而是4321?

    Redis的LPUSH命令会将元素按照参数的顺序从左到右插入到列表的头部 所以,当你执行以下命令时:

    LPUSH ids 1 2 3 4

    Redis会按照参数的顺序将1、2、3、4从左到右插入到列表ids的头部。这就是为什么你在执行LRANGE命令时得到的顺序是4321而不是1234。列表中的元素保持插入顺序,所以最后插入的元素4位于列表的最左侧,3位于4的右侧,依此类推。

    LPUSHX

    在 key 存在时,将⼀个或者多个元素从左侧放入(头插)到 list 中。不存在,直接返回0

    语法:

     LPUSHX key element [element ...]
    

    时间复杂度:只插入⼀个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数

    返回值:插入后 list 的长度。

    示例:

    1. 不存在的情况

    2. 存在的情况


    RPUSH

    将⼀个或者多个元素从右侧放入(尾插)到 list 中。

    语法:

    RPUSH key element [element ...]
    

    时间复杂度:只插入⼀个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数

    返回值:插入后 list 的长度。

    示例:

    RPUSHX

    在 key 存在时,将⼀个或者多个元素从右侧放⼊(尾插)到 list 中。不存在返回0

    语法:

    RPUSHX key element [element ...]

    时间复杂度:只插入⼀个元素为 O(1), 插入多个元素为 O(N), N 为插入元素个数

    返回值:插入后 list 的长度。

    示例:

    LRANGE

    获取从 start 到 end 区间的所有元素,左闭右闭。

    语法:

    LRANGE key start stop

    时间复杂度:O(N)

    返回值:指定区间的元素。

    示例:

    LPOP

    从 list 左侧取出元素(即头删)。

    语法:

    LPOP key

    时间复杂度:O(1)

    返回值:取出的元素或者 nil。

    示例:

    RPOP

    从 list 右侧取出元素(即尾删)。

    语法:

    RPOP key

    时间复杂度:O(1)

    返回值:取出的元素或者 nil。

    LINDEX

    获取从左数第 index 位置的元素。

    语法:

    LINDEX key index

    时间复杂度:O(N)

    返回值:取出的元素或者 nil。

    LINSERT

    在特定位置插入元素。

    语法:

    LINSERT key <BEFORE | AFTER> pivot element

    时间复杂度:O(N)

    返回值:插入后的 list 长度。

    LLEN

    获取 list 长度。

    语法:

    LLEN key

    时间复杂度:O(1)

    返回值:list 的长度。

    示例:

    阻塞版本命令

    blpop 和 brpop 是 lpop 和 rpop 的阻塞版本,和对应非阻塞版本的作用基本⼀致,除了:

    • 在列表中有元素的情况下,阻塞和非阻塞表现是⼀致的。但如果列表中没有元素,非阻塞版本会理 解返回 nil,但阻塞版本会根据 timeout,阻塞⼀段时间,期间 Redis 可以执行其他命令,但要求执行该命令的客户端会表现为阻塞状态。

    • 命令中如果设置了多个键,那么会从左向右进行遍历键,⼀旦有⼀个键对应的列表中可以弹出元 素,命令立即返回。

    • 如果多个客户端同时多⼀个键执行 pop,则最先执行命令的客户端会得到弹出的元素。

    BLPOP

    LPOP 的阻塞版本。

    语法:

     BLPOP key [key ...] timeout
    

    时间复杂度:O(1)

    返回值:取出的元素或者 nil。

    BRPOP

    RPOP 的阻塞版本。

    语法:

    BRPOP key [key ...] timeout

    时间复杂度:O(1)

    返回值:取出的元素或者 nil。

    Redis的列表命令小结

    操作类型命令时间复杂度
    添加rpush key value [value ...]O(k),k 是元素个数
    添加lpush key value [value ...]O(k),k 是元素个数
    添加linsert key before | after pivot valueO(n),n 是 pivot 距离头尾的距离
    查找lrange key start end        O(s+n),s 是 start 偏移量,n 是 start 到 end 的范围
    查找lindex key indexO(n),n 是索引的偏移量
    查找llen keyO(1)
    删除lpop keyO(1)
    删除rpop keyO(1)
    删除lremkey count valueO(k),k 是元素个数
    删除ltrim key start endO(k),k 是元素个数
    修改lset key index valueO(n),n 是索引的偏移量
    阻塞操作blpop brpopO(1)

    制作不易,希望大家多多支持噢~~🤗

  • 相关阅读:
    使用百度智能云api进行图片识别文字以及pdf识别文字
    CentOS7 硬盘扩容
    【数据库系统概论】作业4 第四章 习题6|7 、第五章 习题6
    【Rust】快速教程——冻结&表达式
    十九、类型信息(1)
    driver.js 扩展下次“不再提示”功能
    如何快速落地LLM应用?通过Langchain接入千帆SDK
    如何使用家庭网络运行Aleo Prover
    WSL安装异常:WslRegisterDistribution failed with error: 0xc03a001a
    第 45 章 读写内部 FLASH
  • 原文地址:https://blog.csdn.net/m0_62468521/article/details/133768059