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