Quelle est la façon la plus efficace de créer un support à grande liste / série / Zset / hachage dans Redis?

StackOverflow https://stackoverflow.com/questions/4665759

Question

Utilisation Redis , il y a un certain nombre de commandes pour récupérer ensemble des structures de données ( lrange pour les listes, SMEMBERS pour les jeux, ZRANGE pour les jeux triés et HGETALL hash).

Seul le hachage a une méthode ( HMSET ) pour insérer les articles multiples avec une seule commande.

Tous les exemples que j'ai vu ont montré que l'ajout d'un seul élément à la fois à une liste (par RPUSH ou LPUSH ) ou un ensemble (par SADD / Zadd ).

Le problème plus spécifique que je veux résoudre est de créer des listes et des jeux triés contenant ids de base de données, ces listes sont uniques à chaque utilisateur et contiennent quelques centaines à quelques milliers ids.

Ils sont normalement recueillies à partir d'une requête de base de données, massé un peu en mémoire, puis stocké dans Redis soit pour Pagination à (listes) ou faire ensemble des opérations basées sur pour récupérer des sous-ensembles (ensembles et jeux triés).

À l'heure actuelle, je suis itérer la liste et d'appeler la méthode appropriée pour ajouter chaque élément. Cela a les inconvénients de faire plusieurs demandes sur le fil et de répéter la clé à chaque fois.

redis> RPUSH employee:ids 1000
(integer) 1
redis> RPUSH employee:ids 1001
(integer) 2
redis> RPUSH employee:ids 1002
(integer) 3
redis> RPUSH employee:ids 1003
(integer) 4
redis> del employee:ids
(integer) 1

Je pense que l'utilisation d'une transaction avec MULTI et EXEC pourrait aider à tourner en une seule demande, mais ce ne serait pas utile à la clé répétée.

redis> MULTI
OK
redis> RPUSH employee:ids 1000
QUEUED
redis> RPUSH employee:ids 1001
QUEUED
redis> RPUSH employee:ids 1002
QUEUED
redis> RPUSH employee:ids 1003
QUEUED
redis> RPUSH employee:ids 1004
QUEUED
redis> EXEC
1. (integer) 1
2. (integer) 2
3. (integer) 3
4. (integer) 4
5. (integer) 5

Y at-il quelque chose que je suis absent qui me permettrait d'ajouter des éléments à des listes / ensembles en une seule commande, ou sans répéter la clé à chaque fois?

J'utilise aussi la bibliothèque client Jedis si cette question (ou s'il y a une autre bibliothèque que je peux utiliser à partir de la machine virtuelle Java qui serait mieux).

Était-ce utile?

La solution

La mise en place d'une transaction ne sera pas utile ici. Le but des opérations est d'assurer que les commandes sont exécutées en même temps pour que vous n'avez une demi-liste sur le serveur. Ils se encore envoyer un à la fois.

sont les multiples commandes à l'origine vraiment des problèmes de performance? 1000 articles ne sont pas en fait que beaucoup, et aussi longtemps que vous ne faites pas quelque chose comme l'ouverture d'une nouvelle connexion pour chaque élément il ne devrait pas y avoir de problèmes de latence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top