*Redis LREM 命令

从 List 中移除前 count 个值等于 element 的元素。


*语法

LREM key count element

*参数说明

参数 类型 必填 说明
key String List 的键名
count Integer 移除数量:count>0 从头部开始;count<0 从尾部开始;count=0 移除全部
element String 要移除的元素值

*返回值

条件 返回值
成功移除 移除的元素数量(Integer)
key 不存在 0

*时间复杂度

O(N+M),N 为 List 长度,M 为移除元素数量。


*示例

> RPUSH mylist a b a c a d
(integer) 6

# 从头部移除 2 个 "a"
> LREM mylist 2 a
(integer) 2
> LRANGE mylist 0 -1
1) "b"
2) "c"
3) "a"
4) "d"

# 移除全部 "a"
> RPUSH mylist a
> LREM mylist 0 a
(integer) 2

*常见错误

  1. count=0 移除全部:容易误用,确认是否需要全部移除。

*最佳实践

  1. 消息去重:队列中出现重复任务时,LREM 清理无效任务。
  2. 注意阻塞风险:大 List 上 LREM 可能阻塞,尽量在元素较少的 List 上使用。

*FAQ

Q: LREM count=0 会移除全部匹配元素吗? A: 是。count=0 表示移除 List 中所有等于 element 的元素。

Q: LREM 后 List 为空会删除 key 吗? A: 是。最后一个元素被移除后 key 自动删除。