如果不涉及到集群的話 可以使用lua腳本實(shí)現(xiàn)
數(shù)據(jù)量不多情況可以直接使用keys
EVAL "local keys = redis.call('KEYS', ARGV[1]) for i=1, #keys do redis.call('DEL', keys[i]) end return #keys" 0 keys*
$luaScript = <<<LUA
local keys = redis.call('KEYS', ARGV[1])
for i=1, #keys do
redis.call('DEL', keys[i])
end
return #keys
LUA;
// 執(zhí)行 Lua 腳本
$pattern = 'keys*'; // 匹配的鍵模式
$result = Redis::eval($luaScript, 0, $pattern);
數(shù)據(jù)量多的情況 可以使用scan代替
local cursor = '0'
local count = 0
repeat
local result = redis.call('SCAN', cursor, 'MATCH', ARGV[1], 'COUNT', 100)
cursor = result[1]
local keys = result[2]
for i=1, #keys do
redis.call('DEL', keys[i])
count = count + 1
end
until cursor == '0'
return count
// Lua 腳本
$luaScript = <<<LUA
local cursor = '0'
local count = 0
repeat
local result = redis.call('SCAN', cursor, 'MATCH', ARGV[1], 'COUNT', 100)
cursor = result[1]
local keys = result[2]
for i=1, #keys do
redis.call('DEL', keys[i])
count = count + 1
end
until cursor == '0'
return count
LUA;
// 執(zhí)行 Lua 腳本
$pattern = 'keys*'; // 匹配的鍵
$result = Redis::eval($luaScript, [$pattern], 0);