2012-07-05 2 views
1

Étant donné cet exemple:Redis index: stockage clé complète par rapport à ID

user:1 email [email protected] 
user:1 name bob 

D'après mes recherches, tous les exemples créer un similaire "index" à ce qui suit:

user:[email protected] 1 

Ma question est: ne serait-il pas préférable de le stocker comme "utilisateur: 1"? Cela éliminerait la nécessité de concaténer la chaîne dans le code. Y at-il une autre raison de ne pas stocker toute la chaîne? Mémoire peut-être?

Répondre

3

La question concernait spécifiquement le stockage de la clé complète dans l'index ou simplement un ID numérique faisant partie de cette clé.

Redis a un nombre de memory optimizations que vous pouvez utiliser pour réduire la consommation de mémoire générale. L'une de ces optimisations est l'intset (une structure efficace pour représenter des ensembles d'entiers). Très souvent, les ensembles sont utilisés comme entrées d'index, et dans ce cas, il est préférable de stocker un ID numérique plutôt qu'une clé alphanumérique pour bénéficier de l'optimisation intset.

Votre exemple est légèrement différent car une adresse électronique donnée doit être associée à un seul utilisateur. Un objet de hachage unique est bien pour stocker l'index entier. J'utiliserais toujours l'ID numérique ici car il est plus compact et pourrait bénéficier des futures optimisations de Redis.

0

D'après ce que vous avez communiqué jusqu'à maintenant, j'utiliserais les hachages Redis. Par exemple, je dénormaliserais un peu les données et stockerais comme hmset users:1 email [email protected] name Bob et 'hset users: lookup: email [email protected] 1'. De cette façon, je peux récupérer l'utilisateur en utilisant à la fois son adresse e-mail ou son ID utilisateur. Vous pouvez créer plus de hachages de recherche en fonction de vos besoins.

Pour plus de modèles utiles, regardez le Little Redis book, écrit par Salvatore Sanfilippo lui-même.

+1

En fait, l'auteur du livre Little Redis est Karl Seguin. Salvatore a contribué à la traduction italienne cependant. Je le recommande fortement aussi. –

+0

@DidierSpezia: Eep! Merci pour la correction. – avadhutp

+0

Cela n'a rien à voir avec ma question. – MattB

Questions connexes