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

  1. # 先创建一个表,内容排列是
  2. # morning hello morning helllo morning
  3. redis> LPUSH greet "morning"
  4. (integer) 1
  5. redis> LPUSH greet "hello"
  6. (integer) 2
  7. redis> LPUSH greet "morning"
  8. (integer) 3
  9. redis> LPUSH greet "hello"
  10. (integer) 4
  11. redis> LPUSH greet "morning"
  12. (integer) 5
  13. redis> LRANGE greet 0 4 # 查看所有元素
  14. 1) "morning"
  15. 2) "hello"
  16. 3) "morning"
  17. 4) "hello"
  18. 5) "morning"
  19. redis> LREM greet 2 morning # 移除从表头到表尾,最先发现的两个 morning
  20. (integer) 2 # 两个元素被移除
  21. redis> LLEN greet # 还剩 3 个元素
  22. (integer) 3
  23. redis> LRANGE greet 0 2
  24. 1) "hello"
  25. 2) "hello"
  26. 3) "morning"
  27. redis> LREM greet -1 morning # 移除从表尾到表头,第一个 morning
  28. (integer) 1
  29. redis> LLEN greet # 剩下两个元素
  30. (integer) 2
  31. redis> LRANGE greet 0 1
  32. 1) "hello"
  33. 2) "hello"
  34. redis> LREM greet 0 hello # 移除表中所有 hello
  35. (integer) 2 # 两个 hello 被移除
  36. redis> LLEN greet
  37. (integer) 0