*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
*常见错误
- count=0 移除全部:容易误用,确认是否需要全部移除。
*最佳实践
- 消息去重:队列中出现重复任务时,LREM 清理无效任务。
- 注意阻塞风险:大 List 上 LREM 可能阻塞,尽量在元素较少的 List 上使用。
*FAQ
Q: LREM count=0 会移除全部匹配元素吗? A: 是。count=0 表示移除 List 中所有等于 element 的元素。
Q: LREM 后 List 为空会删除 key 吗? A: 是。最后一个元素被移除后 key 自动删除。