2012-10-08 4 views
2

Dans Redis est-il possible d'obtenir une gamme d'articles d'un ensemble?Redis obtenir la gamme d'un ensemble?

Je remarque seulement SMEMBERS qui vous donne tous les membres. Par exemple, si je dois utiliser SMEMBERS dans des millions d'articles à chaque fois, je veux juste 10 d'entre index 33 456 à 33 466. Les SMEMBERS devront générer une liste complète de millions d'articles chaque fois que j'en demande 10. N'est-ce pas un tueur de performance? Ou est-ce correct parce que Redis est rapide et destiné à être utilisé de cette façon?

+2

Un ensemble est une structure de données non ordonnée. Récupérer des objets par plage dans un ensemble n'a aucun sens. Il n'y a pas de concept d'index. Peut-être devriez-vous utiliser une liste ou un ensemble trié? –

+2

FYI: à partir de [Redis 2.6.0-RC8] (http://antirez.com/post/redis-2.6-rc8-out.html) il y a maintenant une commande 'SRANDMEMBER 'qui renvoie * plusieurs éléments aléatoires * que vous pouvez trouver utile. – deltheil

+1

Vous pouvez atteindre votre objectif en utilisant la commande _sort_ relativement riche en fonctionnalités: http://redis.io/commands/sort –

Répondre

1

Non, ce n'est pas possible car le concept d'index n'existe pas dans le type de données Set. En effet, SMEMBERS ne vous garantit pas une commande spécifique; très probablement l'ordre des éléments sera aléatoire chaque fois que vous l'appelez. Pensez à Sets comme des collections de choses non ordonnées: génial si vous avez besoin de stocker un tas d'identifiants partageant quelque chose en commun, mais définitivement pas le type de données à utiliser si vous avez besoin d'implémenter la pagination. Peut-être que vous cherchez Lists ou Sorted Sets à la place?

Je recommande la lecture de ce qui suit pour comprendre les types de données disponibles dans Redis et quand utiliser chacun:

Questions connexes