如何使用lua删除所有Redis密钥

时间:2018-08-06 19:53:34

标签: lua redis

我正在尝试删除Redis数据集中的所有Redis密钥,但某些ID也存储在Redis中。

if matches[1] == 'del keys' then
    list = redis:smembers("grid") <-- id list
    for k,v in pairs(list) do
        keys = redis:keys('*')
        for k1,v1 in pairs(keys) do
            if v ~= v1 then
                run_bash("redis-cli KEYS *"..v1.."* | xargs redis-cli DEL")
            end
        end
    end
    return "done .."
end

但是它不起作用,我无法弄清楚我在做什么错

1 个答案:

答案 0 :(得分:2)

如果您要删除的密钥数量远大于您要保留的密钥数量,即SET中的密钥。您可以使用以下命令来完成这项工作,它应该更有效:

redis-cli smembers s | xargs -I {} redis-cli move {} 1 && redis-cli flushdb  && redis-cli swapdb 0 1

此命令假定您的数据存储在第0个数据库中,而第1个数据库为空。

说明:

  1. 获取要保留的所有密钥
  2. 将它们移动到另一个空数据库
  3. 删除旧数据库中的所有键
  4. 交换新数据库和旧数据库

如果您坚持要在Lua中完成这项工作,只需调用run_bash函数来运行命令。

更新

正如@Itamar Haber在评论中提到的那样,如果您正在使用Redis 4.0,则可以使用FLUSHDB ASYNC异步删除所有密钥。