Redis
 sql >> Base de données >  >> NoSQL >> Redis

Pagination inversée dans un ensemble trié Redis

Il est trivial d'obtenir le rang d'un élément, puis de travailler par index. En supposant que les seules entrées disponibles pour votre application sont les limites de score initiales de 72 et 46, vous pouvez faire ceci :

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> 

Le seul appel supplémentaire est le O(log(N)) ZREVRANK appel. À partir de là, c'est un peu de calcul côté client pour obtenir les nouveaux index pour la plage qui vous intéresse, et ZREVRANGE pour obtenir les valeurs souhaitées.

J'ai testé cela sur Redis 2.6rc5, mais cela devrait fonctionner sur n'importe quelle version supérieure à 2.0.