考虑一个具有以下成员的 Redis 排序集:
ZADD mySortedSet 11 "A"
ZADD mySortedSet 21 "B"
ZADD mySortedSet 32 "C"
ZADD mySortedSet 46 "D"
ZADD mySortedSet 53 "E"
ZADD mySortedSet 68 "F"
ZADD mySortedSet 72 "G"
ZADD mySortedSet 82 "H"
ZADD mySortedSet 94 "I"
ZADD mySortedSet 104 "J"
ZADD mySortedSet 113 "K"
如果我想以相反的顺序进行分页,从任意切片开始,我可以从这个开始:
// Returns G, F, E, as expected.
ZREVRANGEBYSCORE mySortedSet 72 (46
现在,只知道我的上限是 46,我可以在不知道下限的情况下获得集合中的前 3 个项目 D、C 和 B:
ZREVRANGEBYSCORE mySortedSet 46 -inf LIMIT 0, 3
我的问题是,我怎样才能得到集合中接下来的 3 个项目,J、I 和 H,只知道上限是 72?
// Good start, returns K, J, I, H
ZREVRANGEBYSCORE mySortedSet +inf (72
// Returns K, J, I, due to the offset of 0. I don't know what the correct offset is because it's from the start of the range, not the end.
ZREVRANGEBYSCORE mySortedSet +inf (72 LIMIT 0, 3
我想我想要的是一个负偏移量,我认为它不受支持。
// Would return J, I, H, but actually returns an empty set.
ZREVRANGEBYSCORE mySortedSet +inf (72 LIMIT -1, 3
我可以用正向范围伪造它,然后反转这些项目,但我正在寻找一个本地 Redis 解决方案,如果存在的话。
// Returns H, I, J - the items I want, but reversed.
ZRANGEBYSCORE mySortedSet (72 +inf LIMIT 0, 3
有任何想法吗?
需要明确的是,我知道有 ZRANGE 和 ZREVRANGE,但是在这个查询配置文件中,我不知道实际的索引,只知道分数。