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

    1.LPOP

    LPOP key

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

    可用版本:>= 1.0.0

    时间复杂度:O(1)

    返回值:

    列表的头元素。
    当 key 不存在时,返回 nil 。
    127.0.0.1:6379> flushdb
    OK
    127.0.0.1:6379> rpush ages 00 11 22 33 44 55 66    // 创建列表
    (integer) 7
    127.0.0.1:6379> lpop ages    // 移除头第一个元素
    "00"
    127.0.0.1:6379> lpop ages    // 继续移除头第一个元素
    "11"
    127.0.0.1:6379> lpop names    // key不存在, 返回nil
    (nil)
    127.0.0.1:6379> set name redis666
    OK
    127.0.0.1:6379> lpop name    // key类型不匹配, 报错
    (error) WRONGTYPE Operation against a key holding the wrong kind of value

    2.LPUSH

    LPUSH key value [value ...]

    将一个或多个值 value 插入到列表 key 的表头

    如果有多个 value 值,那么各个 value 值按从左到右的顺序依次插入到表头: 比如说,对空列表 mylist 执行命令 LPUSH mylist c ,列表的值将是 a ,这等同于原子性地执行 LPUSH mylist a 、 LPUSH mylist b 和 LPUSH mylist c 三个命令。

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

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

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

    可用版本:>= 1.0.0

    时间复杂度:O(1)

    返回值:执行 LPUSH 命令后,列表的长度。

    127.0.0.1:6379> exists ages
    (integer) 0
    127.0.0.1:6379> lpush ages 00 11    // 添加多个元素
    (integer) 2
    127.0.0.1:6379> lrange ages 0 -1
    1) "11"
    2) "00"
    127.0.0.1:6379> lpush ages 22    // 添加单个元素
    (integer) 3
    127.0.0.1:6379> lpush ages 22    // 添加重复元素, 列表允许重复元素
    (integer) 4
    127.0.0.1:6379> lrange ages 0 -1
    1) "22"
    2) "22"
    3) "11"
    4) "00"

    3.LPUSHX

    LPUSHX key value

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

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

    可用版本:>= 2.2.0

    时间复杂度:O(1)

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

    127.0.0.1:6379> exists ages
    (integer) 0
    127.0.0.1:6379> lpushx ages 00    // key不存在, 不进行操作
    (integer) 0
    127.0.0.1:6379> exists ages
    (integer) 0
    127.0.0.1:6379> lpush ages 00    // 创建列表ages
    (integer) 1
    127.0.0.1:6379> lrange ages 0 -1
    1) "00"
    127.0.0.1:6379> lpushx ages 11     // 这次lpushx操作成功
    (integer) 2
    127.0.0.1:6379> lrange ages 0 -1
    1) "11"
    2) "00"

    4.LRANGE

    LRANGE key start stop

    返回列表 key 中指定区间内的元素,区间以偏移量 start 和 stop 指定。

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

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

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

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

    超出范围的下标

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

    如果 start 下标比列表的最大下标 end ( LLEN list 减去 1 )还要大,那么 LRANGE 返回一个空列表。

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

    可用版本:>= 1.0.0

    时间复杂度:O(S+N), S 为偏移量 start , N 为指定区间内元素的数量。

    返回值:一个列表,包含指定区间内的元素。

    127.0.0.1:6379> rpush ages 00 11 22 33 44 55 66
    (integer) 7
    127.0.0.1:6379> lrange ages 0 -1    // 第一个元素到最后一个元素
    1) "00"
    2) "11"
    3) "22"
    4) "33"
    5) "44"
    6) "55"
    7) "66"
    127.0.0.1:6379> lrange ages 0 2    // 第一个元素到第三个元素
    1) "00"
    2) "11"
    3) "22"
    127.0.0.1:6379> lrange ages 0 10    // stop超过最大范围, 忽略超过部分
    1) "00"
    2) "11"
    3) "22"
    4) "33"
    5) "44"
    6) "55"
    7) "66"
    127.0.0.1:6379> lrange ages 7 10    // start和end都不在范围内
    (empty list or set)
    127.0.0.1:6379> lrange ages 0 0
    1) "00"
    127.0.0.1:6379>

    5.LREM

    LREM key count value

    根据参数 count 的值,移除列表中与参数 value 相等的元素。

    count 的值可以是以下几种:

    • count 0 : 从表头开始向表尾搜索,移除与 value 相等的元素,数量为 count 。
    • count 0 : 从表尾开始向表头搜索,移除与 value 相等的元素,数量为 count 的绝对值。
    • count 0 : 移除表中所有与 value 相等的值。

    可用版本:>= 1.0.0

    时间复杂度:O(N), N 为列表的长度。

    返回值:

    被移除元素的数量。
    因为不存在的 key 被视作空表(empty list),所以当 key 不存在时, LREM 命令总是返回 0 。
    127.0.0.1:6379> flushdb
    OK
    127.0.0.1:6379>
    127.0.0.1:6379> rpush words aaa bbb ccc aaa bbb ccc aaa bbb ccc    // 创建列表
    (integer) 9
    127.0.0.1:6379> lrange words 0 -1
    1) "aaa"
    2) "bbb"
    3) "ccc"
    4) "aaa"
    5) "bbb"
    6) "ccc"
    7) "aaa"
    8) "bbb"
    9) "ccc"
    127.0.0.1:6379> lrem words 2 aaa    // 移除从表头到表尾,最先发现的两个 aaa    
    (integer) 2
    127.0.0.1:6379> lrange words 0 -1    // 前两个aaa被删除了
    1) "bbb"
    2) "ccc"
    3) "bbb"
    4) "ccc"
    5) "aaa"
    6) "bbb"
    7) "ccc"
    127.0.0.1:6379> lrem words -2 bbb    // 移除从表尾到表头,最先发现的两个bbb
    (integer) 2
    127.0.0.1:6379> lrange words 0 -1
    1) "bbb"
    2) "ccc"
    3) "ccc"
    4) "aaa"
    5) "ccc"
    127.0.0.1:6379> lrem words 0 ccc    // 移除表中所有 ccc
    (integer) 3
    127.0.0.1:6379> lrange words 0 -1
    1) "bbb"
    2) "aaa"
  • 相关阅读:
    2012年6月30号PMP考试总结
    安装了VS2010 sp1 后再安装ASP.NET MVC 3.0的问题(Final Result: Installation failed with error code: (0x80070643), "安装时发生严重错误 " (Ela)
    黄光裕方面独家点评国美中报:领先优势即将丧失
    Asp.net 模板页(MasterPage)里的 js脚本路径
    Windows 7 Sp1 x64 无法安装英文语言包(已解决)
    The issue of vertical lines throughing the Report footer or the whole page in Crystal report 11
    Windows Server 2008 R2 with Service Pack 1
    垃圾农业银行网银https://www.95599.cn/PersonalBank/startUpHtmlSessionAction.ebf
    如何填写PMP审计表单,Audit注意事项
    被日军飞机炸毁的上海南火车站铁轨上拍摄了一个父母刚被炸死、正在铁轨上深哀啼号的婴儿
  • 原文地址:https://www.cnblogs.com/no-celery/p/13710324.html
Copyright © 2011-2022 走看看