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"
posted @ 2020-09-22 09:47  KILLNPE  阅读(159)  评论(0编辑  收藏  举报