web-dev-qa-db-fra.com

Redis: rechercher des clés correspondant à un modèle

Comment puis-je trouver des clés correspondant à un modèle comme celui-ci:

Par exemple:

J'ai quelques clés:

abc:parent1

abc:parent2

abc:parent1:child1

abc:parent2:child2

Comment puis-je trouver seulement

abc:parent1

abc:parent2

17
Hoang Tuan

Les clés sont spécifiquement notées comme une commande à ne pas exécuter en production en raison de la façon dont elles fonctionnent. Ce dont vous avez besoin ici est de créer un index de vos clés. Utilisez un set pour stocker les noms de clé du motif souhaité. Lorsque vous ajoutez une nouvelle clé we, ajoutez son nom à l'ensemble. Par exemple:

Set abc:parent1:child1 breakfast
Sadd abc:parent1:index abc:parent1

Ensuite, lorsque vous avez besoin de la liste:

Smembers abc:parent1:index

Vous donnera la liste, sans les pénalités et les problèmes associés à l'utilisation de la commande "evil" keys. De plus, vous supprimeriez une entrée avec sremove lors de la suppression de la clé. Vous bénéficiez également de la possibilité de savoir combien de clés se trouvent dans l'index en un seul appel.

Si vous devez absolument, positivement, éviter d'utiliser un index, utilisez SCAN au lieu de clés. La seule fois où vous devriez même considérer les clés est si vous exécutez un esclave de débogage où le seul processus qui l'utilise est votre processus de débogage.

30
The Real Bill

La commande Motif KEYS vous aidera pour la même chose.

ex:

redis> MSET one 1 two 2 three 3 four 4
OK
redis> KEYS *o*
1) "two"
2) "one"
3) "four"

Pour votre exemple spécifique, la commande ci-dessous fonctionnera:

redis 127.0.0.1:6379> keys *parent[0-9]
1) "abc:parent2"
2) "abc:parent1"

Voici la description détaillée de la commande .

Mise à jour: Bien que la suggestion ci-dessus vous aide à obtenir la sortie souhaitée, les touches redis [~ # ~] [~ # ~] la commande est mauvaise comme les autres l'ont mentionné. [~ # ~] touches [~ # ~] bloque et peut consommer beaucoup de RAM lors de la préparation de la réponse.

N'utilisez pas KEYS dans votre code d'application habituel. Si vous cherchez un moyen de trouver des clés dans un sous-ensemble de votre espace de clés, envisagez d'utiliser SCAN ou des ensembles.

Merci The Real Bill et Itamar, j'ai mieux compris.

9
Bivil M Jacob