前言
多多点赞,会变好看!
多多留言,会变有钱!
本文适用于Redis集群,是否适用单机模式未做测试!
一、创建lua脚本:
命名为clear_data.lua
Lua
redis.call("select",0)
--游标的id
local cursor = 0
--查找删除的key的数量
local keyNum = 0
repeat
--使用scan搜索,cursor=0的时候标识一个新的迭代期,服务器返回0的时候表示迭代已经结束
local res = redis.call("scan",cursor,"MATCH",KEYS[1])
if(res ~= nil and #res>=0) then
cursor = tonumber(res[1])
local ks = res[2]
if(ks ~= nil and #ks>0) then
redis.replicate_commands()
--循环删除当前迭代器迭代出的数据
for i=1,#ks,1 do
local key = tostring(ks[i])
--使用UNLINK删除,区别于del的是这个是异步执行的
--这条指令要版本大于4.0.0 小于4.0.0就使用del
redis.call("UNLINK",key)
end
--统计删除的key的数量
keyNum = keyNum + #ks
end
end
--当服务器返回0的时候,跳出循环
until( cursor <= 0 )
return keyNum
二、执行命令
命令:/Redis路径/redis-cli -c -h IP -p 端口 --eval /脚本路径/clear_data.lua "模糊匹配值"
案例:/usr/local/redis/bin/redis-cli -c -h 127.0.0.1 -p 6379 --eval /root/clear_data.lua "*test??:*"
模糊匹配值一定要写正确,不然删错可就麻烦了!!