consideri un Redis ordinati in set con i seguenti membri:Reverse Impaginazione attraverso un Redis Ordinati 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"
Se voglio fare impaginazione in ordine inverso, a partire da una fetta d'arbitrario, posso iniziare con questo:
// Returns G, F, E, as expected.
ZREVRANGEBYSCORE mySortedSet 72 (46
Ora, sapendo solo che il mio limite superiore è 46, posso ottenere i precedenti 3 articoli nel set, D, C, B e, senza conoscere il limite inferiore facendo:
ZREVRANGEBYSCORE mySortedSet 46 -inf LIMIT 0, 3
La mia domanda è, come posso ottenere i seguenti 3 elementi nel set, J, I e H, in questo ordine, sapendo solo che il limite superiore è 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
Quello che penso di volere è un offset negativo, che non credo sia supportato.
// Would return J, I, H, but actually returns an empty set.
ZREVRANGEBYSCORE mySortedSet +inf (72 LIMIT -1, 3
posso fingere con una marcia in avanti, e poi invertire le voci, ma sto cercando una soluzione nativa Redis, se ne esiste uno.
// Returns H, I, J - the items I want, but reversed.
ZRANGEBYSCORE mySortedSet (72 +inf LIMIT 0, 3
Qualche idea?
Per essere chiari, so che c'è ZRANGE e ZREVRANGE, ma in questo profilo di query, non conoscerò l'indice attuale, solo il punteggio.
Non c'è un modo semplice per farlo. Vedo tre opzioni. (1) Reverse sul tuo client (2) reverse usando LUA (3) usa ZCOUNT per conoscere il numero di elementi e sottostrati da lì come sostituzione di indici negativi. – seppo0010
Hey seppo0010, grazie per il tuo contributo. Al momento sto facendo 1, e volevo solo vedere se c'era un modo migliore. Non è un fan degli script LUA per qualcosa del genere, ma considereremo certamente l'approccio ZCOUNT, dato che la query viene eseguita all'interno di MULTI, quindi rimarrà atomica. – majelbstoat