三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

哈尔滨网站建设如何o2o网站建设最好公司

哈尔滨网站建设如何o2o网站建设最好公司 哈尔滨网站建设如何,o2o网站建设最好公司,网站建设需要用到那些语言,网站显示建设中页面项目中使用了流量控制#xff0c;是通过redis实现#xff0c;现做一总结记录#xff0c;并按照我的理解做一整理。项目情况#xff1a;开放平台#xff0c;用户注册-申请应用-申请产品#xff08;一组接口#xff09;#xff0c;申请了应用就有了应用ID#x…项目中使用了流量控制是通过redis实现现做一总结记录并按照我的理解做一整理。项目情况开放平台用户注册-申请应用-申请产品一组接口申请了应用就有了应用ID应用ID具有唯一性一个用户一个应用ID而且用户在对接时必须要将应用ID作为参数传过来这样就能使用应用ID接口名称进行精确流控。如果项目涉及多个系统可以指定系统从而根据应用ID接口名称系统ID进行精确控制。流量控制方式滑动窗口、令牌。滑动窗口的方式的控制维度应用ID、接口名称、开始时间、结束时间、令牌数、时间粒度月、天、时、分、秒。令牌的方式控制维度应用ID、接口名称、开始时间、结束时间、令牌数核心处理生成redis的key应用ID、接口名称用连接如果应用ID的值是ALL则控制全部用户的接口判断当前毫秒级的时间戳是不是开始时间和结束时间开始时间和结束时间也是毫秒级的时间戳生成lua脚本使用redis的eval执行lua脚本滑动窗口的lua脚本如下redis.call(zremrangeByScore, KEYS[1], 0, ARGV[1]) local res redis.call(zcard, KEYS[1]) if (res nil) or (res tonumber(ARGV[4])) then redis.call(zadd, KEYS[1], ARGV[2], ARGV[3]) return true else return false end令牌的lua脚本如下这个将令牌数默认设置成了5local var0 redis.call(get, KEYS[1]) if var0 false then var0 0 end if tonumber(var0) 5 then return false end redis.call(incr, KEYS[1]) redis.call(expire, KEYS[1], 3600) return true判断流程先判断redis里有没有这个key如果没有就是首次即流量为0再流量跟阈值匹配超了返回false没超递增设置ttl防止非高频交易指标占用redis
← 返回列表