LREM:从列表中移除指定元素
用户可以通过 LREM
命令移除列表中的指定元素:
- LREM list count element
count
参数的值决定了 LREM
命令移除元素的方式:
如果
count
参数的值等于0
,那么LREM
命令将移除列表中包含的所有指定元素;如果
count
参数的值大于0
,那么LREM
命令将从列表的左端开始向右进行检查,并移除最先发现的count
个指定元素;如果
count
参数的值小于0
,那么LREM
命令将从列表的右端开始向左进行检查,并移除最先发现的abs(count)
个指定元素(abs(count)
即是count
的绝对值);
LREM
命令在执行完毕之后将返回被移除的元素数量作为返回值。
举个例子,对于以下三个包含相同元素的列表来说:
- redis> RPUSH sample1 "a" "b" "b" "a" "c" "c" "a"
- (integer) 7
- redis> RPUSH sample2 "a" "b" "b" "a" "c" "c" "a"
- (integer) 7
- redis> RPUSH sample3 "a" "b" "b" "a" "c" "c" "a"
- (integer) 7
执行以下命令将移除 sample1
列表包含的所有 "a"
元素:
- redis> LREM sample1 0 "a"
- (integer) 3 -- 移除了三个 "a" 元素
- redis> LRANGE sample1 0 -1
- 1) "b" -- 列表里面已经不再包含 "a" 元素
- 2) "b"
- 3) "c"
- 4) "c"
而执行以下命令将移除 sample2
列表最靠近列表左端的两个 "a"
元素:
- redis> LREM sample2 2 "a"
- (integer) 2 -- 移除了两个 "a" 元素
- redis> LRANGE sample2 0 -1
- 1) "b"
- 2) "b"
- 3) "c"
- 4) "c"
- 5) "a"
因为上面的 LREM
命令只要求移除最先发现的两个 "a"
元素,所以位于列表最右端的 "a"
元素并没有被移除,图 4-23 展示了这个 LREM
命令的执行过程。
图 4-23 从 sample2
列表中移除最靠近列表左端的两个 "a"
元素
最后,执行以下命令将移除 sample3
列表最靠近列表右端的两个 "a"
元素:
- redis> LREM sample3 -2 "a"
- (integer) 2 -- 移除了两个 "a" 元素
- redis> LRANGE sample3 0 -1
- 1) "a"
- 2) "b"
- 3) "b"
- 4) "c"
- 5) "c"
因为上面的 LREM
调用只要求移除最先发现的两个 "a"
元素,所以位于列表最左端的 "a"
元素并没有被移除,图 4-24 展示了这个 LREM
调用的执行过程。
图 4-24 从 sample3
列表里面移除最靠近列表右端的两个 "a"
元素
其他信息
属性 | 值 |
---|---|
复杂度 | O(N) ,其中 N 为给定列表的长度。 |
版本要求 | LREM 命令从 Redis 1.0.0 版本开始可用。 |