Распечатать количество ключей в Redis - PullRequest
132 голосов
/ 27 марта 2012

Есть ли способ напечатать количество ключей в Redis?

Мне известно о

keys *

Но это кажется немного тяжелым весом. - Учитывая, что Redis является хранилищем ключей, возможно, это единственный способ сделать это. Но я все еще хотел бы видеть что-то вроде

count keys *

Ответы [ 9 ]

170 голосов
/ 27 марта 2012

Вы можете выполнить команду INFO, которая возвращает информацию и статистику о сервере. Смотрите здесь для примера вывода.

Как уже упоминалось в комментариях mVChr, вы можете использовать info keyspace непосредственно в Redis-Cli.

139 голосов
/ 27 марта 2012

DBSIZE возвращает количество ключей и их легче разобрать.

Недостаток: если срок действия ключа истек, он все равно может считаться.

http://redis.io/commands/dbsize

39 голосов
/ 13 июля 2012

ПРЕДУПРЕЖДЕНИЕ: Не запускайте это на производственном компьютере.

В коробке с Linux:

redis-cli KEYS "*" | wc -l

Примечание: Как упомянуто в комментариях ниже, это операция O (N), поэтому на большой БД с большим количеством ключей не следует ее использовать. Для небольших развертываний, это должно быть хорошо.

21 голосов
/ 29 мая 2016

используйте DBSIZE это не даст вам ключа

Возвращает количество ключей в выбранной в данный момент базе данных.

читать дальше http://redis.io/commands/dbsize

20 голосов
/ 16 марта 2018

Для подсчета общего количества ключей используйте следующую команду:

127.0.0.1:6379> DBSIZE
14 голосов
/ 15 августа 2013

Начиная с Redis 2.6, поддерживается lua, вы можете получить количество подстановочных ключей, например:

eval "return #redis.call('keys', 'prefix-*')" 0

см. eval команда

3 голосов
/ 25 апреля 2015

dbsize() возвращает общее количество ключей.

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

Пример на питоне; считая все ключи, начинающиеся с prefix_:

import redis
r = redis.StrictRedis(host = 'localhost', port=6379)
iter=1000
print 'Approximately', r.dbsize() * float(sum([r.randomkey().startswith('prefix_') for i in xrange(iter)])) / iter

Даже iter=100 дает приличную оценку в моем случае, но очень быстро, по сравнению с keys prefix_.

Улучшение состоит в том, чтобы отбирать 1000 ключей для каждого запроса, но сохранять общее количество, чтобы после двух запросов вы делили на 2000, а после трех запросов - на 3000. Таким образом, если ваше приложение заинтересовано в общее количество совпадающих ключей довольно часто, то каждый раз оно будет все ближе и ближе к истинному значению.

1 голос
/ 07 июня 2013

После Redis 2.6 результат команды INFO делится на секции.В разделе «пространство ключей» есть поля «ключи» и «ключи с истекшим сроком действия» для определения количества ключей.

0 голосов
/ 26 октября 2017
eval "local count = redis.call('scan', 0, 'match', 'key:*:key', 'count', 10000) if count ~= 0 then return #count[2] end " 0

eval "local count = redis.call('sscan', 'key.key:all', 0, 'match', '*', 'count', 1000000) if count ~= 0 then return #count[2] end " 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...