ein Redis Betrachten sortierte mit den folgenden Mitgliedern gesetzt:Reverse-Paginierung Durch Einen Redis Sortiert Set
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"
Wenn ich Paginierung in umgekehrter Reihenfolge tun mag, an einer beliebigen Scheibe ausgehend ich damit anfangen kann:
// Returns G, F, E, as expected.
ZREVRANGEBYSCORE mySortedSet 72 (46
Nun wissen nur, dass meine obere Grenze ist 46, kann ich die vorherigen drei Elemente in der Reihe bekommen, D, C und B, ohne indem Sie die unteren Grenze zu wissen:
ZREVRANGEBYSCORE mySortedSet 46 -inf LIMIT 0, 3
Meine Frage ist, wie bekomme ich die nächsten 3 Elemente in der Reihe, J, I und H, in dieser Reihenfolge, nur zu wissen, dass die Obergrenze 72 ist?
Was ich denke, ich will, ist ein negativer Offset, was ich glaube nicht unterstützt wird.
// Would return J, I, H, but actually returns an empty set.
ZREVRANGEBYSCORE mySortedSet +inf (72 LIMIT -1, 3
kann ich vortäuschen mit einem vorderen Bereich, und dann diese Elemente umgekehrt, aber ich bin auf der Suche für eine native Redis Lösung, falls vorhanden.
// Returns H, I, J - the items I want, but reversed.
ZRANGEBYSCORE mySortedSet (72 +inf LIMIT 0, 3
Irgendwelche Ideen?
Um klar zu sein, ich weiß, es gibt ZRANGE und ZREVRANGE, aber in diesem Abfrageprofil werde ich nicht den tatsächlichen Index, nur die Punktzahl kennen.
Es gibt keine einfache Möglichkeit, dies zu tun. Ich sehe drei Möglichkeiten. (1) Reverse auf Ihrem Client (2) Reverse mit LUA (3) verwenden Sie ZCOUNT, um die Anzahl der Elemente kennen und subtrahieren von dort als Ersatz für negative Indizes. – seppo0010
Hey seppo0010, danke für deine Eingabe. Mache gerade 1 und wollte nur sehen, ob es einen besseren Weg gibt. Kein Fan von LUA-Skripten für so etwas, wird aber sicherlich den ZCOUNT-Ansatz berücksichtigen, da die Abfrage innerhalb von MULTI ausgeführt wird, so dass sie atomar bleibt. – majelbstoat