redis 批量删除key pattern

429 阅读1分钟

redis命令行中可以执行lua脚本来进行一些复杂的操作,可以直接在命令行中传入lua代码内容,也可以传入一个脚本路径。

数据量不大可以使用keys来进行查找匹配

简易版本:

eval "return redis.call('DEL', unpack(redis.call('KEYS', KEYS[1])))" 0 pattern

或者使用for循环

eval "local tasks = redis.call('KEYS', KEYS[1] .. '*'); for i=1,#tasks do redis.call('DEL', tasks[i]) end; return tasks" 1 pattern

使用scan来防止keys命令阻塞其他命令的执行

eval 'local result = {};local cursor="0"; repeat local r = redis.call("SCAN", cursor, "MATCH", KEYS[1], "COUNT", 100); local list = r[2]; for i=1,#list do result[#result+1] = list[i]; redis.call("del", list[i]) end; cursor = tostring(r[1]) until cursor == "0" return result;' 1 pattern

命令中的pattern是需要替换的匹配规则