*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 不存在。