Redis
 sql >> Database >  >> NoSQL >> Redis

Impaginazione inversa attraverso un set ordinato Redis

È banale ottenere il rango per un elemento e quindi lavorare per indici. Presumendo che gli unici input disponibili per la tua applicazione siano i limiti del punteggio iniziale di 72 e 46, puoi farlo:

redis 127.0.0.1:6379> ZREVRANGEBYSCORE mySortedSet 72 (46
1) "G"
2) "F"
3) "E"
redis 127.0.0.1:6379> ZREVRANK mySortedSet G
(integer) 4
redis 127.0.0.1:6379> ZREVRANGE mySortedSet 1 3
1) "J"
2) "I"
3) "H"
redis 127.0.0.1:6379> 

L'unica chiamata aggiuntiva è O(log(N)) ZREVRANK chiamata. Da lì, è un po' di matematica lato client per ottenere i nuovi indici per l'intervallo che ti interessa e ZREVRANGE per ottenere i valori che desideri.

L'ho testato su Redis 2.6rc5, ma dovrebbe funzionare su qualsiasi versione successiva alla 2.0.