(Feature Request) Support Negative Offsets for ZREVRANGEBYSCORE #608

majelbstoat opened this Issue Jul 29, 2012 · 0 comments


None yet
1 participant

Consider a Redis sorted set with the following members:

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"

If I want to do pagination, starting at an arbitrary slice, I can start with this:

// Returns G, F, E, as expected.

Now, knowing only that my upper bound is 46, I can get the previous 3 items in the set, D, C, and B, without knowing the lower bound by doing:

ZREVRANGEBYSCORE mySortedSet 46 -inf LIMIT 0, 3

However, I don't believe I can get the next 3 items in the set, J, I and H, in that order, knowing only that the upper bound is 72.

// Good start, returns K, J, I, H
ZREVRANGEBYSCORE mySortedSet +inf (72
// Returns K, J, 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

What I think I want is a negative offset, which I don't think is supported.

// Would return J, I, H
ZREVRANGEBYSCORE mySortedSet +inf (72 LIMIT -1, 3

I can fake it with a forward range, and then reversing those items, but I'm looking for a native Redis solution, if one exists.

// Returns H, I, J - the items I want, but reversed.
ZRANGEBYSCORE mySortedSet (72 +inf LIMIT 0, 3

Otherwise, if this can be achieved using a combination of commands, I'd love to hear it!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment