我正在尝试删除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
但是它不起作用,我无法弄清楚我在做什么错
答案 0 :(得分:2)
如果您要删除的密钥数量远大于您要保留的密钥数量,即SET
中的密钥。您可以使用以下命令来完成这项工作,它应该更有效:
redis-cli smembers s | xargs -I {} redis-cli move {} 1 && redis-cli flushdb && redis-cli swapdb 0 1
此命令假定您的数据存储在第0个数据库中,而第1个数据库为空。
说明:
如果您坚持要在Lua中完成这项工作,只需调用run_bash
函数来运行命令。
更新:
正如@Itamar Haber在评论中提到的那样,如果您正在使用Redis 4.0,则可以使用FLUSHDB ASYNC
异步删除所有密钥。