Lua в redis cli - посчитать размер ключей в redis
Пробую на lua посчитать размер ключей
local cursor = "0"
local all_keys = {}
local memory_usage_results = {}
repeat
local result = redis.call('SCAN', cursor)
cursor = result[1]
for _, key in ipairs(result[2]) do
table.insert(all_keys, key)
local usage = redis.call('MEMORY', 'USAGE', key)
table.insert(memory_usage_results, {key = key, usage = usage})
end
until cursor == "0"
return memory_usage_results
Но вывод redis-cli --eval script.lua
1) (empty array)
2) (empty array)
Как правильно получить массив?
да и
local memory_usage_results = {}
memory_usage_results['aa'] = '33'
return memory_usage_results
возвращает (empty array)
Ответы (1 шт):
Автор решения: des1roer
→ Ссылка
local total = {}
local keys = redis.call('KEYS', '*')
local v2 = {}
for _, key in ipairs(keys) do
local prefix = nil
local reg = ''
if prefix == 'v2_' then
v2[key] = key
end
if prefix then
total[prefix] = total[prefix] or { size = 0, count = 0 }
local usage = redis.call('MEMORY', 'USAGE', key)
total[prefix].count = total[prefix].count + 1
total[prefix].size = total[prefix].size + usage
total[prefix].reg = reg
end
end
local json_result = cjson.encode({total, v2})
redis.call('SET', 'scan:key', json_result)
return 100
как решил по итогу - сохраняю данные в redis