Search code examples
redissortedset

zrevrange with order of members with same score not reversed


zrange sortedSetKey 0 -1 rev

This returns the members in the reverse order. Now, if there is more than one member with the same score. It returns the members in the reversed order (ordering of same score members is lexicographical)

Question: How do I get zrevrange with members in descending order of score but ascending order of members with the same score. Is this possible?

PS: assume member is an integer (0 to 2^64)


Solution

  • Negate your scores.

    For example, say, you currently have:

    > ZADD foo 1 a 0 b 1 c 2 d
    (integer) 4
    > ZRANGE foo 0 -1 REV
    1) "d"
    2) "c"
    3) "a"
    4) "b"
    

    With negated scores:

    > ZADD bar -1 a 0 b -1 c -2 d
    (integer) 4
    > ZRANGE bar 0 -1
    1) "d"
    2) "a"
    3) "c"
    4) "b"