Распечатать количество клавиш в Redis

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

Я знаю

keys *

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

count keys *

Ответ 1

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

Ответ 2

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

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

http://redis.io/commands/dbsize

Ответ 3

В поле Linux:

redis-cli KEYS "*" | wc -l

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

Ответ 4

Так как Redis 2.6 поддерживается lua, вы можете получить количество подстановочных клавиш, подобных этому

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

см. команда eval

Ответ 5

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

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

читать http://redis.io/commands/dbsize

Ответ 6

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

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

Пример в python; считая все клавиши, начинающиеся с 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. Таким образом, если ваше приложение заинтересовано общее количество совпадающих ключей довольно часто, а затем каждый раз, когда он приближается и приближается к истинному значению.

Ответ 7

После Redis 2.6 результат команды INFO разделяется по разделам. В разделе "keyspace" есть поля "ключи" и "Истекшие ключи", чтобы указать, сколько ключей есть.

Ответ 8

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