实现分布式限流:https://www.cnblogs.com/huangqingshi/p/10290615.html
先看一下limit的lua脚本,需要给脚本传两个值,一个值是限流的key,一个值是限流的数量。获取当前key,然后判断其值是否为nil,如果为nil的话需要赋值为0,然后进行加1并且和limit进行比对,如果大于limt即返回0,说明限流了,如果小于limit则需要使用Redis的INCRBY key 1,就是将key进行加1命令。并且设置超时时间,超时时间是秒,并且如果有需要的话这个秒也是可以用参数进行设置。
—lua 下标从 1 开始
— 限流 key
local key = KEYS[1]
— 限流大小
local limit = tonumber(ARGV[1])
— 获取当前流量大小
local curentLimit = tonumber(redis.call(‘get’, key) or “0”)
if curentLimit + 1 > limit then
— 达到限流大小 返回
return 0;
else
— 没有达到阈值 value + 1
redis.call(“INCRBY”, key, 1)
— EXPIRE后边的单位是秒
redis.call(“EXPIRE”, key, 10)
return curentLimit + 1
end
