nombre de clés correspondant à un motif

Comment puis-je trouver le nombre de toutes les clés qui ont un motif correspondant?

Par exemple, il y a deux clés abc:random-text-1 et abc:random-text-2 . Le schéma commun ici est abc: Donc, le compte est ici 2.

Comment puis-je le faire en redis?

Si vous recherchez simplement avec KEYS, avec votre client redis, vous obtiendrez une liste de numéros de toutes les clés correspondantes, n’est-ce pas?

par exemple

 KEYS abc:* 

te donnera

 1) abc:random-text-1 2) abc:random-text-2 

ou vous pouvez exécuter ce qui suit:

 ./redis-cli KEYS "abc:*" | wc -l 

et vous obtiendrez 2 comme sortie.

De là :

 eval "return #redis.pcall('keys', 'abc:*')" 0 

Ce n’est pas O (1), mais au moins le compte se fait côté serveur.

En considérant la performance, je ne vous recommande pas d’utiliser les KEYS

Attention: considérez KEYS comme une commande qui ne doit être utilisée que dans des environnements de production avec un soin extrême. Cela peut ruiner les performances quand il est exécuté sur des bases de données volumineuses. Cette commande est destinée au débogage et aux opérations spéciales, telles que la modification de la disposition de votre espace de clés. 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 des ensembles.

Je vous suggère de considérer le scan , si votre version redis> 2.8.0. Mais cela dépend du type de données que vous allez utiliser.

Voici un exemple simple de redis doc :

 redis 127.0.0.1:6379> sadd myset 1 2 3 foo foobar feelsgood (integer) 6 redis 127.0.0.1:6379> sscan myset 0 match f* 1) "0" 2) 1) "foo" 2) "feelsgood" 3) "foobar" 

S’il s’agit d’une chose ponctuelle, vous pouvez utiliser KEYS comme décrit par x_maras, mais vous ne devriez pas l’utiliser dans votre code, car KEYS parsingra chaque clé de la firebase database entière à chaque appel.

Si vous voulez le faire fréquemment, il n’y a pas de «bonne» méthode exactement comme vous l’avez écrit car il sera toujours assez inefficace d’parsingr chaque clé (même en utilisant SCAN, car cela ferait la même chose que KEYS juste dans un manière plus sûre).

Cependant, si les modèles dont vous avez besoin sont connus à l’avance, vous pouvez conserver un jeu de chaque clé correspondant au modèle.

 SET abc:random-text-1 "blah" SADD patterns:abc abc:randomtext-1 SET abc:random-text-2 "more blah" SADD patterns:abc abc:randomtext-2 SCARD patterns:abc // (integer) 2 SORT patterns:abc BY nosort GET * // 1) "blah" // 2) "more blah" 

Depuis la ligne de commande, redis-cli --scan --pattern 'abc:*' | wc -l redis-cli --scan --pattern 'abc:*' | wc -l