L'accès à une liste par un index qui n'est pas proche de l'avant ou de la fin sera coûteux et coûtera O (N). Pour les grandes listes, ce n'est pas très efficace.
L'utilisation de hachages peut être mieux adaptée à vos besoins. Cela utilisera plus de mémoire qu'une liste, mais fournira un accès proche de O (1).
Un hachage dans redis est une clé nommée pouvant contenir des champs et des valeurs arbitraires.
Vous pouvez stocker l'ensemble de l'enregistrement de l'utilisateur dans un seul hachage redis, nommé en utilisant l'attribut member_id (nous espérons qu'il s'agit d'une valeur courte). Si le member_id est garantie unique par utilisateur, voici comment remplir un hachage pour l'utilisateur avec member_id 42.
hset user:42 email [email protected]
hset user:42 username foobar
hset user:42 logincount 0
Le Redis « Nom de la clé » ici est « l'utilisateur: 42 ». Chaque utilisateur obtiendra une clé unique, similaire à une seule ligne dans une base de données SQL, mais plus flexible. Vous pouvez ensuite mettre à jour deux hachages auxiliaires: l'un pour mapper les noms d'utilisateur sur member_id, et l'autre pour mapper les adresses e-mail sur member_id. Cela suppose que vous avez une relation 1: 1 entre member_id, nom d'utilisateur et adresse e-mail.
hset username_to_id foobar 42
hset email_to_id [email protected] 42
Lorsque vous devez rechercher l'adresse e-mail pour un utilisateur particulier, vous devez d'abord regarder la member_id du hachage email_to_id
puis récupérer le champ email
du hachage à clé utilisateur: member_id De même, vous peut commencer avec un nom d'utilisateur, rechercher l'ID de membre dans le hachage username_to_id
, puis accéder à l'enregistrement utilisateur stocké dans l'utilisateur: member_id
hachage.
Voici un exemple pour la recherche le nom d'utilisateur donné une adresse e-mail:
redis> hget email_to_id [email protected]
"42"
redis> hget user:42 username
"foobar"
redis>
Vous pouvez ajouter plusieurs enregistrements à l'utilisateur en ajoutant plus de champs à « utilisateur: » hachage. Si vous voulez incrémenter un compteur de connexion, qui est simple ainsi:
redis> hincrby user:42 login_count 1
(integer) 1
redis> hgetall user:42
1. "email"
2. "[email protected]"
3. "username"
4. "foobar"
5. "login_count"
6. "1"
redis>
Vous pouvez trouver more information about hashes sur le site redis.io.
merci beaucoup. mais pourquoi ne pas définir ou trier – Leon
mais si 1 m de l'utilisateur est moyen d'obtenir 1m hash id, quand vous obtenez en particulier, cela va réduire les performances – Leon