计算KEYS占用内存大小
-- 初始化游标为 "0",用于 SCAN 命令的初始值
local cursor = "0"
-- 创建一个空表 result,用于存储结果
local result = {}
-- 使用 repeat 循环,直到游标返回 "0" 表示扫描结束
repeat
-- 使用 SCAN 命令逐步获取键,SCAN 命令返回一个表,第一个元素是新的游标,第二个元素是键的列表
local res = redis.call('SCAN', cursor)
-- 更新游标为新的游标值,以便在下一次迭代中继续扫描
cursor = res[1]
-- 获取键的列表
local keys = res[2]
-- 遍历每个键
for _, key in ipairs(keys) do
-- 使用 MEMORY USAGE 命令获取键的内存使用情况
local memory = redis.call('MEMORY', 'USAGE', key)
-- 将键和其内存使用情况格式化为字符串,并插入到结果表中
table.insert(result, key .. ": " .. memory .. " bytes")
end
-- 添加延迟以降低 Redis 的 CPU 占用率,单位为秒
redis.call('DEBUG', 'SLEEP', 0.1)
-- 继续循环,直到游标为 "0" 表示扫描结束
until cursor == "0"
-- 返回结果表
return result
使用redis-cli
redis-cli -h xxx -p 6379 -a $(cat ./pwd) --eval mem.lua > mem_result.txt
cat mem_result.txt |awk -F ':' '{print $1 $2 $NF}'|uniq -c | sort -nr > redis.txt
🍺转载文章请注明出处,谢谢!🍺