zoukankan      html  css  js  c++  java
  • Redis教程10-列表(List)常用命令使用参考3

    1.LSET

    LSET key index value

    将列表 key 下标为 index 的元素的值设置为 value 。

    当 index 参数超出范围,或对一个空列表( key 不存在)进行 LSET 时,返回一个错误。

    关于列表下标的更多信息,请参考 LINDEX 命令。

    可用版本:>= 1.0.0

    时间复杂度:

    对头元素或尾元素进行 LSET 操作,复杂度为 O(1)。
    其他情况下,为 O(N), N 为列表的长度。
    返回值:操作成功返回 ok ,否则返回错误信息。
    127.0.0.1:6379> exists ages
    (integer) 0
    127.0.0.1:6379> lset ages 0 11    // key不存在
    (error) ERR no such key
    127.0.0.1:6379> rpush ages 00 11 22 33
    (integer) 4
    127.0.0.1:6379> lset ages 1 44    // 第二个元素改为44
    OK
    127.0.0.1:6379> lrange ages 0 -1    // 查看
    1) "00"
    2) "44"
    3) "22"
    4) "33"
    127.0.0.1:6379> lset ages 5 66    // index5超过范围
    (error) ERR index out of range

    2.LTRIM

    LTRIM key start stop

    对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。

    举个例子,执行命令 LTRIM list 2 ,表示只保留列表 list 的前三个元素,其余元素全部删除。

    下标(index)参数 start 和 stop 都以 0 为底,也就是说,以 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。

    你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。

    当 key 不是列表类型时,返回一个错误。

    注意LTRIM命令和编程语言区间函数的区别

    假如你有一个包含一百个元素的列表 list ,对该列表执行 LTRIM list 10 ,结果是一个包含11个元素的列表,这表明 stop 下标也在 LTRIM 命令的取值范围之内(闭区间),这和某些语言的区间函数可能不一致,比如Ruby的 Range.new 、 Array#slice 和Python的 range() 函数。

    超出范围的下标

    超出范围的下标值不会引起错误。

    如果 start 下标比列表的最大下标 end ( LLEN list 减去 1 )还要大,或者 start stop , LTRIM 返回一个空列表(因为 LTRIM 已经将整个列表清空)。

    如果 stop 下标比 end 下标还要大,Redis将 stop 的值设置为 end 。

    可用版本:>= 1.0.0

    时间复杂度:O(N), N 为被移除的元素的数量。

    返回值:

    命令执行成功时,返回 ok 。
    # 情况 1: 常见情况, start 和 stop 都在列表的索引范围之内
    
    redis> LRANGE alpha 0 -1       # alpha 是一个包含 5 个字符串的列表
    1) "h"
    2) "e"
    3) "l"
    4) "l"
    5) "o"
    
    redis> LTRIM alpha 1 -1        # 删除 alpha 列表索引为 0 的元素
    OK
    
    redis> LRANGE alpha 0 -1       # "h" 被删除了
    1) "e"
    2) "l"
    3) "l"
    4) "o"
    
    
    # 情况 2: stop 比列表的最大下标还要大
    
    
    redis> LTRIM alpha 1 10086     # 保留 alpha 列表索引 1 至索引 10086 上的元素
    OK
    
    redis> LRANGE alpha 0 -1       # 只有索引 0 上的元素 "e" 被删除了,其他元素还在
    1) "l"
    2) "l"
    3) "o"
    
    
    # 情况 3: start 和 stop 都比列表的最大下标要大,并且 start < stop
    
    redis> LTRIM alpha 10086 123321
    OK
    
    redis> LRANGE alpha 0 -1        # 列表被清空
    (empty list or set)
    
    
    # 情况 4: start 和 stop 都比列表的最大下标要大,并且 start > stop
    
    redis> RPUSH new-alpha "h" "e" "l" "l" "o"     # 重新建立一个新列表
    (integer) 5
    
    redis> LRANGE new-alpha 0 -1
    1) "h"
    2) "e"
    3) "l"
    4) "l"
    5) "o"
    
    redis> LTRIM new-alpha 123321 10086    # 执行 LTRIM
    OK
    
    redis> LRANGE new-alpha 0 -1           # 同样被清空
    (empty list or set)

    3.RPOP

    RPOP key

    移除并返回列表 key 的尾元素。

    可用版本:>= 1.0.0

    时间复杂度:O(1)

    返回值:

    列表的尾元素。
    当 key 不存在时,返回 nil 。
    具体时间用参考 LPOP命令, 除了移除元素方向不同, 其他一致

    4.RPUSH

    RPUSH key value [value ...]

    将一个或多个值 value 插入到列表 key 的表尾(最右边)。

    如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表尾:比如对一个空列表 mylist 执行 RPUSH mylist c ,得出的结果列表为 c ,等同于执行命令 RPUSH mylist a 、 RPUSH mylist b 、 RPUSH mylist c 。

    如果 key 不存在,一个空列表会被创建并执行 RPUSH 操作。

    当 key 存在但不是列表类型时,返回一个错误。

    在 Redis 2.4 版本以前的 RPUSH 命令,都只接受单个 value 值。

    可用版本:>= 1.0.0

    时间复杂度:O(1)

    返回值:执行 RPUSH 操作后,表的长度。

    RPUSH命令的使用参考命令LPUSH命令, 除了添加元素方向不同, 使用基本一致...

    5.RPUSHX

    RPUSHX key value

    将值 value 插入到列表 key 的表尾,当且仅当 key 存在并且是一个列表。

    和 RPUSH 命令相反,当 key 不存在时, RPUSHX 命令什么也不做。

    可用版本:>= 2.2.0

    时间复杂度:O(1)

    返回值:RPUSHX 命令执行之后,表的长度。

    RPUSHX命令的使用参考命令LPUSHX命令, 除了添加元素方向不同, 使用基本一致... ...

  • 相关阅读:
    「运维之美」技术周刊 ( 第 2 期 )
    Win10下MySQL(5.7和8两个版本)忘记root密码的解决办法
    SpringBoot使用自定义注解实现简单参数加密解密(注解+HandlerMethodArgumentResolver)
    Set的交集、差集踩坑记录
    RocketMQ控制台命令
    IDEA远程连接和上传文件到服务器
    记录一下JProfiler的使用
    点击验证码刷新的实现
    算法学习:我终于明白二分查找的时间复杂度为什么是O(logn)了
    Ubuntu:一个部署好的tomcat应用(war包)怎么用Nginx实现动静分离?
  • 原文地址:https://www.cnblogs.com/no-celery/p/13710408.html
Copyright © 2011-2022 走看看