Redis récupère toute la valeur de la liste sans itération et sans popping

J'ai une simple clé de liste redis = > "supplier_id"

Maintenant tout ce que je veux récupérer toute la valeur de la liste sans réellement itérer ou éclater la valeur de la liste

Exemple pour récupérer toute la valeur d'une liste maintenant j'ai itérer sur la longueur redis

element = []
0.upto(redis.llen("supplier_id")-1) do |index| 
  element << redis.lindex("supplier_id",index)
 end

Cela peut-il être fait sans l'itération peut-être avec une meilleure modélisation redis . quelqu'un peut-il suggérer

51
demandé sur Viren 2012-05-22 17:27:05

2 réponses

Pour récupérer tous les éléments d'une liste avec Redis, vous n'avez pas besoin d'itérer et de récupérer chaque élément individuel. Ce serait vraiment inefficace.

Il vous suffit d'utiliser la commande LRANGE pour récupérer tous les éléments d'un seul coup.

elements = redis.lrange( "supplier_id", 0, -1 )

Retourne tous les éléments de la liste sans modifier la liste elle-même.

114
répondu Didier Spezia 2012-05-22 20:26:41

Je ne suis pas un peu clair sur votre question mais si le supplier_id est numérique, pourquoi ne pas utiliser un ZSET?

Ajoutez vos valeurs comme ceci:

ZADD suppliers 1 "data for supplier 1"  
ZADD suppliers 2 "data for supplier 2"  
ZADD suppliers 3 "data for supplier 3"  

Vous pouvez alors tout supprimer jusqu'à (mais pas y compris le fournisseur trois) comme ceci:

ZREMRANGEBYSCORE suppliers -inf 2

Ou

ZREMRANGEBYSCORE suppliers -inf (3

Cela vous donne également un accès très rapide (par ID fournisseur) si vous voulez juste en lire.

Espérons que cela aide!

2
répondu mkgrunder 2012-05-22 15:39:50