Как получить размер данных / значения в ключах Redis с префиксом? - PullRequest
1 голос
/ 06 августа 2020

Я много чего сохранил в Redis. Одна группа из них имеет пространство имен cache (ключ начинается с cache:). Я хочу знать размер данных / значений с пространством имен cache. Могу ли я добиться этого в Redis? Есть предложения?

Ответы [ 2 ]

1 голос
/ 10 августа 2020

Вы можете сделать это с помощью RedisGears (https://oss.redislabs.com/redisgears/) с одной строкой:

RG.PYEXECUTE "GB().map(lambda x: int(execute('MEMORY', 'USAGE', x['key']))).aggregate(0, lambda a,x: a+x, lambda a,x: a+x).run('cache:*')"

Первая операция карты получает размер каждого ключа, а операция агрегирования суммирует его . аргументом функции запуска является префикс ключей для запуска.

0 голосов
/ 06 августа 2020

Вы можете использовать сканирование с командами использования памяти . В зависимости от размера вашей базы данных (вы можете проверить это с помощью DBSIZE) - вы можете указать параметр count команды scan. Следующая команда будет сканировать базу данных на соответствие префиксу cache:.

SCAN 0 MATCH cache:* COUNT 2000

Затем вы можете выполнить MEMORY USAGE для отдельных ключей. Вы можете добиться этого на своем любимом языке программирования с помощью доступной библиотеки redis.

Пример lua может быть примерно таким (у меня недостаточно опыта работы с lua, но похоже, что он работает). Он будет возвращать общий размер значений в байтах.

local response = redis.call("SCAN", 0, "MATCH", "cache:*", "count", 2000)
local keys = response[2]
local total = 0

for i = 1, #keys do
    total = total + redis.call("MEMORY", "USAGE", keys[i])
end

return total

это может быть не лучшим «производительным» решением для больших баз данных. вам может потребоваться обновить курсор.

Изменить: как @for_stack указал в комментарии, он не будет работать, если счетчик меньше вашего общего размера ключа, когда счетчик меньше, его необходимо повторить несколько раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...