如何使用lua删除所有redis键

我正在尝试删除redis数据集中的所有redis键,除了也存储在redis中的一些ID。

if matches[1] == 'del keys' then
    list = redis:smembers("grid") <-- id列表
    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

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

点赞
用户5384363
用户5384363

如果你要删除的键的数量比你要保留的键的数量多得多,即在你的“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”异步删除所有键。

2018-08-07 01:58:59