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;
// 执行 Lua 脚本
$pattern = 'keys*'; // 匹配的键模式
$result = Redis::eval($luaScript, 0, $pattern);
数据量多的情况 可以使用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;
// 执行 Lua 脚本
$pattern = 'keys*'; // 匹配的键
$result = Redis::eval($luaScript, [$pattern], 0);
如果不涉及到集群的话 可以使用lua脚本实现
数据量不多情况可以直接使用keys
数据量多的情况 可以使用scan代替
感谢分享