*Redis ZREMRANGEBYLEX 命令

ZREMRANGEBYLEX 移除有序集合中按字典序介于 min 和 max 范围内的所有成员。要求集合中所有成员分数相同。


*语法

ZREMRANGEBYLEX key min max

*参数说明

参数 类型 必填 说明
key String 有序集合键名
min String 字典序范围最小边界。- 表示负无穷,[ 表示包含,( 表示不包含
max String 字典序范围最大边界。+ 表示正无穷,[ 表示包含,( 表示不包含

*返回值

  • Integer:移除的成员数量
  • Error:键类型错误、边界格式错误

*时间复杂度

O(log(N) + M),其中:

  • N 为有序集合基数
  • M 为移除的成员数量

*示例

*基本字典序范围移除

> ZADD myzset 0 a 0 b 0 c 0 d 0 e 0 f
(integer) 6
> ZREMRANGEBYLEX myzset [b [d
(integer) 3
> ZRANGE myzset 0 -1
1) "a"
2) "e"
3) "f"

*使用开区间

> ZADD myzset2 0 x 0 y 0 z
(integer) 3
> ZREMRANGEBYLEX myzset2 (x (z
(integer) 1
> ZRANGE myzset2 0 -1
1) "x"
2) "z"

*使用无穷边界

> ZADD myzset3 0 alpha 0 beta 0 gamma
(integer) 3
> ZREMRANGEBYLEX myzset3 [beta +
(integer) 2
> ZRANGE myzset3 0 -1
1) "alpha"

*常见错误

错误 原因 解决
WRONGTYPE key 不是有序集合 检查 key 类型
ERR syntax error min/max 格式错误 必须以 [(-+ 开头

*最佳实践

  • 场景:字典序索引清理、前缀标签批量删除、字典序范围归档
  • 所有成员分数必须相同(通常设为 0),否则行为无意义
  • 移除大量成员时会产生写放大,评估是否需要分批次处理
  • 大集合操作会阻塞,生产环境评估使用方式
  • 移除后集合为空不会自动删除,需要时手动 DEL

*FAQ

Q1: ZREMRANGEBYLEX 和 ZREMRANGEBYSCORE 的区别? A: ZREMRANGEBYLEX 按字典序移除(要求同分);ZREMRANGEBYSCORE 按分数范围移除。

Q2: 分数不同时使用会怎样? A: 可以执行,但结果无意义。Redis 按分数排序后,同分才按字典序。

Q3: 移除后返回 0 是为什么? A: 范围内没有匹配的成员,或 key 不存在。