web-dev-qa-db-fra.com

Redis set vs hash

Dans de nombreux tutoriels Redis (tels que celui-ci ), les données sont stockées dans un ensemble, mais plusieurs valeurs sont combinées dans une chaîne (un compte utilisateur peut être stocké dans cet ensemble sous forme de deux entrées, : nom d'utilisateur "et" utilisateur: 1000: mot de passe ").

Cependant, Redis a aussi des hashes. Il semble plus logique d’avoir un hachage "utilisateur: 1000", qui contient une entrée "nom d'utilisateur" et une entrée "mot de passe". Plutôt que de concaténer des chaînes pour accéder à une valeur particulière, vous devez simplement y accéder directement dans le hachage.

Alors, pourquoi ne l'utilise-t-on pas autant? S'agit-il de vieux tutoriels? Ou bien les hachages Redis ont-ils des problèmes de performances?

63
Nairou

Les hachages Redis sont utiles pour stocker des données plus complexes, comme vous le suggérez dans votre question. Je les utilise exactement pour cela - pour stocker des objets avec plusieurs attributs qui doivent être mis en cache (en particulier les données d'inventaire pour un produit particulier sur un site de commerce électronique). Bien sûr, je pourrais utiliser une chaîne concaténée - mais cela ajoute une complexité inutile à mon code client et la mise à jour d'un champ individuel n'est pas possible. 

Vous avez peut-être raison - les didacticiels peuvent tout simplement être antérieurs à l'introduction de Hash. Ils étaient clairement conçus pour stocker des représentations d'objet: http://oldblog.antirez.com/post/redis-weekly-update-1.html

Je suppose qu'une des préoccupations est le nombre de commandes que Redis doit traiter lorsqu'un nouvel élément est inséré (n nombre de commandes, où n est le nombre de champs du hachage) par rapport à une simple commande String SET. Je n'ai pas encore trouvé que c'était un problème pour un service qui frappe Redis environ 1 million de fois par jour. Pour moi, utiliser la bonne structure de données est plus important qu'un impact négligeable sur les performances. 

(Voir aussi mon commentaire sur Redis Sets contre Redis Strings - je pense que votre question fait référence à Strings mais corrigez-moi si je me trompe!)

43
Mike G

Les hachages sont l’une des méthodes les plus efficaces pour stocker des données dans Redis, allant même jusqu’à en recommander l’utilisation chaque fois que possible.

http://redis.io/topics/memory-optimization

Utilisez des hachages quand c'est possible

Les petits hachages sont codés dans un très petit espace, vous devriez donc essayer de représenter vos données en utilisant des hachages chaque fois que cela est possible. Par exemple, si vous avez des objets représentant des utilisateurs dans une application Web, au lieu d'utiliser des clés différentes pour le nom, le nom, l'adresse électronique, le mot de passe, utilisez un seul hachage avec tous les champs obligatoires.

40
Dan Gayle

Comparaison de cas d'utilisation:

Les ensembles fournissent une interface sémantique pour stocker les données sous forme d'ensemble dans le serveur Redis. Les cas d'utilisation de ce type de données seraient davantage à des fins d'analyse, par exemple: combien de personnes consultent la page du produit et combien achètent le produit.

Les hachages fournissent une interface sémantique permettant de stocker des objets de données simples et complexes sur le serveur Redis. Par exemple, profil utilisateur, catalogue de produits, etc.

Ref: Learning Redis

0
Mohammad Akbari