php实现滑动窗口限流,基于Redis的限流器的实现(示例讲解)

1 概述

系统中的接口通常都有限流,比如 70次/秒 ,如何保证我们的接口的调用次数在超过第三方接口限流的时候快速失败呢?这时候就需要限流器了。下面是笔者用redis实现限流器的流程图。

638366bf33f6f86b86c37db4ddd28860.png

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的限流器的实现(示例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值