17 lines
565 B
Lua
17 lines
565 B
Lua
-- 自动隐藏 Lua 脚本 (spec §6.4)
|
||
-- KEYS[1]=counter, KEYS[2]=user_marker
|
||
-- ARGV[1]=threshold, ARGV[2]=ttl_counter, ARGV[3]=ttl_marker
|
||
-- 并发防护由应用层在调用前获取 5s 短锁 `mod:report:lock:{target_type}:{target_id}`(见 9.1)
|
||
local first = redis.call('SET', KEYS[2], '1', 'NX', 'EX', ARGV[3])
|
||
if not first then
|
||
return {0, tonumber(redis.call('GET', KEYS[1]) or '0')}
|
||
end
|
||
local n = redis.call('INCR', KEYS[1])
|
||
if n == 1 then
|
||
redis.call('EXPIRE', KEYS[1], ARGV[2])
|
||
end
|
||
if n >= tonumber(ARGV[1]) then
|
||
return {1, n}
|
||
end
|
||
return {0, n}
|