我是靠谱客的博主 精明啤酒,最近开发中收集的这篇文章主要介绍springboot基于Redis实现令牌桶限流,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

令牌桶限流

引入redis的maven依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.6.6</version>
</dependency>

增加config配置

@Configuration
public class RedisConfig {
@Bean
public RedisTemplate<String,Object> redisTemplate(LettuceConnectionFactory lettuceConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(lettuceConnectionFactory);
redisTemplate.setKeySerializer(RedisSerializer.string());
redisTemplate.setValueSerializer(RedisSerializer.string());
return redisTemplate;
}
}

设置定时任务以固定时间增加令牌桶数量,decr接口是处理业务消费令牌的

@Slf4j
@EnableScheduling
@RestController
public class RedisController {
@Autowired
private RedisTemplate<String,Object> redisTemplate;
@GetMapping("/decr")
public void decr(){
Object list = redisTemplate.opsForList().leftPop("list");
if(list == null){
log.info("系统繁忙,请稍后重试!");
return;
}
log.info("可以进入处理业务 {}",list);
}
@Scheduled(cron = "1/5 * * * * ?")
public void incr(){
Long list = redisTemplate.opsForList().size("list");
log.info("令牌桶数量为 :{}",list);
if (list == null || list < 20) {
for (int i = 0; i < 10; i++) {
redisTemplate.opsForList().leftPush("list", UUID.randomUUID().toString());
}
}
}
}

最后

以上就是精明啤酒为你收集整理的springboot基于Redis实现令牌桶限流的全部内容,希望文章能够帮你解决springboot基于Redis实现令牌桶限流所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部