Печать количества ключей в Redis



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



Я в курсе



keys *


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



count keys *
1047   9  

9 ответов:

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

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

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

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

http://redis.io/commands/dbsize

предупреждение: не запускайте это на производственной машине.

на Linux:

redis-cli KEYS "*" | wc -l

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

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

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

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

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

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

посмотреть eval command

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

127.0.0.1:6379> DBSIZE

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

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

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

Comments

    Ничего не найдено.