1 概述
系统中的接口通常都有限流,比如 70次/秒 ,如何保证我们的接口的调用次数在超过第三方接口限流的时候快速失败呢?这时候就需要限流器了。下面是笔者用redis实现限流器的流程图。
2 代码
/** * 获取限流权限 * @param key * @param millisecond 毫秒数 * @param limitcount 限流次数 * @return */ public static boolean getcurrentlimiting(string key, long millisecond, integer limitcount){ try { boolean currentlimitinglock = redisdistributelockutil.lock(key); if(currentlimitinglock){ long llen = redisclient.llen(getcurrentlimitingrediskey(key)); if(llen < limitcount){ redisclient.lpush(getcurrentlimitingrediskey(key), dateutil.current(false) + ""); return true; }else{ long lasttime = long.parselong(redisclient.lindex(getcurrentlimitingrediskey(key), -1)); if((dateutil.current(false) - lasttime) >= millisecond){ redisclient.lpush(getcurrentlimitingrediskey(key), dateutil.current(false) + ""); redisclient.ltrim(getcurrentlimitingrediskey(key), 0, limitcount); return true; } } } }finally { redisdistributelockutil.unlock(key); } return false; }
以上这篇基于redis的限流器的实现(示例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。
如对本文有疑问, 点击进行留言回复!!
星际无限CTO张超:IPFS分布式存储领域仍是蓝海,中链云将开启行业新思路!
厉害!俩月吃透阿里P8架构师推荐608页kafka源码,成功入职蚂蚁
网友评论