redis - nodejs - recuento de claves que coinciden con un patrón
redis tutorial (5)
Al considerar el rendimiento, no recomendaría que use KEYS
Advertencia: considere las LLAVES como un comando que solo debe usarse en entornos de producción con extremo cuidado. Puede arruinar el rendimiento cuando se ejecuta en bases de datos grandes. Este comando está destinado a la depuración y operaciones especiales, como cambiar el diseño del espacio de claves. No use LLAVES en su código de aplicación habitual. Si está buscando una forma de encontrar claves en un subconjunto de su espacio de claves, considere usar conjuntos.
Le sugiero que considere scan , si su versión redis> 2.8.0. Pero depende de qué tipo de datos va a usar.
Aquí hay un ejemplo 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"
¿Cómo puedo encontrar el recuento de todas las claves que tiene un patrón coincidente?
Por ejemplo, hay dos teclas abc:random-text-1
y abc:random-text-2
. El patrón común aquí es abc:
Entonces, aquí el recuento es 2.
¿Cómo puedo hacer esto en redis?
Desde here :
eval "return #redis.pcall(''keys'', ''abc:*'')" 0
No es O (1), pero al menos el recuento se realiza en el servidor.
Desde la línea de comando, redis-cli --scan --pattern ''abc:*'' | wc -l
redis-cli --scan --pattern ''abc:*'' | wc -l
Si es algo que ocurre una sola vez, puede usar KEYS como lo describe x_maras, pero no debe usar eso en su código ya que KEYS escaneará cada clave en la base de datos completa cada vez que se llame.
Si desea hacerlo con frecuencia, no hay una "buena" manera exactamente como lo ha escrito porque siempre será bastante ineficiente escanear cada tecla (incluso utilizando SCAN, ya que estaría haciendo lo mismo que las TECLAS solo en un manera más segura).
Sin embargo, si conoce los patrones que necesita con anticipación, puede mantener un conjunto de cada tecla que coincida con el patrón.
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"
Si simplemente busca con KEYS, con su cliente redis, obtendrá una lista de números de todas las claves que coinciden, ¿verdad?
p.ej
KEYS abc:*
Te regalaré
1) abc:random-text-1
2) abc:random-text-2
o puede ejecutar lo siguiente:
./redis-cli KEYS "abc:*" | wc -l
y obtendrás 2
como salida.