如何根据一些正则表达式删除redis(生产中)中的键?

时间:2017-09-13 12:48:03

标签: lua redis

我想根据某些正则表达式删除正在生产的redis数据库中的密钥。

我考虑过各种解决方案: How to atomically delete keys matching a pattern using Redis

Like - 扫描所有键,直到光标返回“0”位置并将键存储在某处,然后最后删除键。 但这是在SCAN命令后产生非确定性操作的错误。

另外,如果使用从一个lua脚本到另一个lua脚本的密钥存储,从redis删除密钥;还有另外一个问题。

命令看起来像这样 - 从第1个lua脚本输出|输入到第二个删除lua脚本

现在,在第一个脚本中 - 它创建了一个阻塞操作,我不知道为什么? 试着自己只运行第一个脚本!!!

任何一个解决方案都可以用于生产并且没有阻塞操作?

这是我的第一个lua脚本

local all_keys = {};
local used_keys = {};
local keys = {};
local sum = 0;
local done = false;
local cursor = "0"
repeat
    local result = redis.call("SCAN", cursor, "match", ARGV[1])
    cursor = result[1];
    keys = result[2];
    for i, key in ipairs(keys) do
--  sum = sum + redis.call("HLEN",key);
    used_keys[#used_keys+1] = key;
    end
    if cursor == "0" then
        done = true;
    end
until done
return used_keys;

第二个lua脚本:

for i,k in ipairs(KEYS) do
        redis.call("DEL", k);
end
--redis.call("DEL",KEYS);
return true;

使用的命令是:

  

time redis-cli --eval FirstScript.lua,'*'| xargs redis-cli --eval SecondScript.lua

0 个答案:

没有答案