redis lua限流写法

    xiaoxiao2022-07-04  103

    -- 业务标志 local businessTag=KEY[1] -- 限流数量 local limitDefault=tonumber(KEY[2] or 100) -- 限流标志 local limitOnOffTag=KEY[3] -- 限流开关 默认是 开 local limitOnOff=tonumber(redis.call("get",limitOnOffTag..":REQ_LIMIT_ON_OFF") or 0) if(limitOnOff>0){   return 1 } -- 如果没有获取到系统配置的限流数量就获取传入的默认限流数量 local limit = tonumber(redis.call("get",limitOnOffTag..":req_limit") or limitDefault)) -- 当前时间窗口内访问次数统计缓存KEY local key = businessTag..":counter:"..limitOnOffTag -- 获取当前时间范围内已访问次数 local current=tonumber(redis.call("get",key) or 0)); -- 设置统计时间范围 local windowTimeOutSetting=tonumber(redis.call("get",limitOnOffTag..":request_window_timeout") or 1) -- 如果历史还没有设置访问就设置一个key if(current<1){      redis.call("set",key,0)      redis.call("expire",key,windowTimeOutSetting)      current=0; } -- 当前时间范围内访问次数已经大于限流 则返回0  if(current+1>limitDefault) then   return 0 else -- 当前时间范围内访问次数处于限流范围内 则返回已访问次数   redis.call("INCRBY", key ,"1")   return (current+1) end

    最新回复(0)