环境:
redis_version:7.2.2
本文参考 redis 官方文档1
语法
ZRANGE key start stop [BYSCORE | BYLEX] [REV] [LIMIT offset count] [WITHSCORES]
参数 | 含义 |
---|---|
key | 是有序集合的键名 |
start stop | 在不同语境下,可用值不一样 |
BYSCORE | BYLEX | 按照分数查询 | 相同分数按字典序返回 |
REV | 分数降序,相同分数 value 字典降序; 默认是升序,相同分数 value 字典升序; |
WITHSCORES | 返回分数 |
不加 BYSCORE | BYLEX 时
start stop 表示元素下标,从 0 开始,0 表示第一个元素,-1 表示最后一个元素,大于有续集合长度,也不会报错。要求 start <= stop (start 是正数,stop 是负数除外)。
# 取出第一个元素
zrange test:zset_0 0 0
# 取出全部元素
zrange test:zset_0 0 -1
# 取出 最后两个元素
zrange test:zset_0 -2 -1
# 不会返回任何元素
zrange test:zset_0 -1 -2
使用 BYSCORE 参数
start, stop 表示分数;可选值 -inf (负无穷大), 整数, +inf(正无穷大),整数前可加(
符号表示不包含当前值
# 所有值
zrange test:zset_0 -inf +inf BYSCORE
# score in [1, 3]
zrange test:zset_0 1 3 BYSCORE
# score in (1, 3]
zrange test:zset_0 (1 3 BYSCORE
# score in (1, 3)
zrange test:zset_0 (1 (3 BYSCORE
使用 BYLEX 参数 时
start stop 是字符串,可以 是 -
、 +
表示 负无穷、正无穷;或以 ([
开头;
不使用 rev 关键字, 字典序 start <= stop
使用 rev 关键字, 字典序 start >= stop
# 添加 元素到 test:zset_1
zadd test:zset_1 0 'one' 0 'two' 0 'three'
# 查询所有元素
zrange test:zset_1 - + bylex
# value 字典序 in (one, tz]
zrange test:zset_1 (one [tz bylex
# value 字典序 in [one, tz]
zrange test:zset_1 [one [tz bylex
官方文档要求 使用 BYLEX 的有序集合 score 应保持一致。实际上不一致也可以使用,只不过结果可能不符合预期
zadd test:zset_0 1 'one' 2 'two' 3 'three'
zrange test:zset_0 - + bylex
zrange test:zset_0 [a [z bylex
zrange test:zset_0 [a [three bylex
使用 REV 参数 时
- 默认 start <= stop 表示下标。
# 取出倒序的前两个元素 zrange test:zset_0 0 1 rev # 取出倒序的第一个元素 zrange test:zset_0 0 0 rev # 取出倒序的所有元素 zrange test:zset_0 0 -1 rev
- 如果使用了 BYSCORE start, stop 表示分数,start >= stop。
# 所有元素 zrange test:zset_0 +inf -inf rev byscore # score in [3, 3] zrange test:zset_0 3 3 rev byscore # score in (1, 3) zrange test:zset_0 (3 (1 rev byscore # score in [2, 3) zrange test:zset_0 (3 2 rev byscore
- 如果使用了 BYLEX start, stop 表示 value 的字典序,start >= stop。
# 所有元素 zrange test:zset_1 + - bylex rev # 按字段倒序 查询 value in [two, three] zrange test:zset_1 [two [three bylex rev # 按字段倒序 查询 value in [two, three) zrange test:zset_1 [two (three bylex rev
LIMIT offset count 分页查询
仅支持 byscore 或 bylex 查询
WITHSCORES 返回分数
不支持 BYLEX 参数
ZRANGE ↩︎