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
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.
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.