Печать количества ключей в Redis
есть ли способ распечатать количество ключей в Redis?
Я в курсе
keys *
но это, кажется, немного тяжелый вес. - Учитывая, что Redis является хранилищем ключевых значений, возможно, это единственный способ сделать это. Но я все равно хотел бы увидеть что-то вроде
count keys *
9 ответов:
вы можете выполнить команду INFO, которая возвращает информацию и статистику о сервере. Смотрите здесь для примера вывода.
Как уже упоминалось в комментариях mVChr, вы можете использовать
info keyspaceнепосредственно на redis-cli.
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