基于springboot 整合Redis实现令牌桶分布式API限流

这里简单说一下用Redis实现令牌桶算法的方法。

用户每一次访问请求的时候,从redis中获取一个令牌,如果拿到令牌了,就说明没有超出限制,就通过这个请求,相反如果拿不到令牌就拦截这个请求或者返回错误信息,下面是代码实现部分。

1.定义Redis限流规则类

public final class RRateLimiter {
	private String rediskey = "limit";
	private Long all_conut = 20L;//令牌的总数量
	private Long conut = 10L;//生产的令牌数量
	private Long time = 5L;//产生的令牌的时间间隔
	private TimeUnit timetype = TimeUnit.SECONDS;
	private ListOperations<String,Object> redis;
	private void start() {
		new Thread(() -> {
			try {
				while (true) {
					timetype.sleep(time);
					if(redis.size(rediskey)<all_conut)
					LongStream.range(0,conut).forEach(x->redis.rightPush(rediskey,UUID.randomUUID().toString().replace("-","")));
				}
			} catch(Exception e){}
		}).start();
	}
	public RRateLimiter(ListOperations<String, Object> list, String rediskey, Long conut, Long time,
			TimeUnit timetype) {
		th
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值