Подтвердить что ты не робот

Количество ключей, соответствующих шаблону

Как найти количество всех ключей, имеющих соответствующий шаблон.

Например, есть две клавиши abc:random-text-1 и abc:random-text-2. Общий шаблон здесь abc:. Итак, здесь число равно 2.

Как я могу сделать это в redis?

4b9b3361

Ответ 1

Если вы просто выполняете поиск с помощью KEYS, с вашим клиентом redis, вы получите список номеров всех ваших ключей, не так ли?

например.

KEYS abc:*

предоставит вам

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

или вы можете запустить следующее:

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

и вы получите 2 в качестве вывода.

Ответ 2

От здесь:

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

Это не O (1), но, по крайней мере, счет делается на стороне сервера.

Ответ 3

Рассматривая производительность, я бы не рекомендовал использовать KEYS

Внимание: рассмотрите KEYS как команду, которая должна использоваться только в производственных средах с особой осторожностью. Это может испортить производительность когда он выполняется против больших баз данных. Эта команда предназначена для отладки и специальных операций, таких как изменение вашего ключа раскладка. Не используйте KEYS в вашем обычном коде приложения. Если вы ищет способ поиска ключей в подмножестве вашего ключевого пространства, рассмотрите используя наборы.

Я предлагаю вам рассмотреть scan, если ваша версия redis > 2.8.0. Но он полагается на тип данных, которые вы собираетесь использовать.

Вот простой пример из 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"

Ответ 4

Если это одноразовая вещь, вы можете использовать KEYS, как описано x_maras, но вы не должны использовать ее в своем коде, так как KEYS будет каждый раз проверять каждый ключ во всей базе данных.

Если вы хотите делать это часто, нет никакого "хорошего" способа, как вы писали, потому что всегда будет достаточно неэффективно сканировать каждый ключ (даже используя SCAN, поскольку он будет делать то же самое, что и KEYS просто более безопасно).

Однако, если нужные вам шаблоны известны заранее, вы можете сохранить набор всех ключей, соответствующих шаблону.

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"

Ответ 5

В командной строке redis-cli --scan --pattern 'abc:*' | wc -l