redis执行lua脚本实现springboot接口限流实践
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local current = tonumber(redis.call('get', key) or "0")
if current + 1 > limit then
return 0 -- 超出限制
else
if current == 0 then
redis.call('expire', key, 1) -- 设置键的过期时间,避免永久锁
end
redis.call('incr', key) -- 自增键值
return 1 -- 未超出限制
end
这段Lua脚本用于实现接口访问频率的限制。它通过Redis的键值来记录访问次数,并设置过期时间来防止无限期占用资源。脚本接收两个参数,一个是限制次数,一个是键名。如果当前访问次数加1后超过限制次数,则返回0;否则,如果当前访问次数是0(即键不存在),它会设置键的过期时间,然后递增访问次数,并返回1。这个脚本可以在Redis中通过EVAL
命令执行。
评论已关闭