- 添加maven依赖 , 使用springboot2.x版本
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>org.Apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency>
- 添加redis配置进Application.yml , springboot2.x版本的redis是使用lettuce配置的
spring: redis: database: 0 host: localhost port: 6379 lettuce: # 这里标明使用lettuce配置 pool: max-active: 8 # 连接池最大连接数 max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制 max-idle: 5 # 连接池中的最大空闲连接 min-idle: 0 # 连接池中的最小空闲连接 timeout: 10000ms # 连接超时时间
- 使用redis作限流器有两种写法
- 方法一:
Long size = redisTemplate.opsForList().size("apiRequest"); if (size < 1000) { redisTemplate.opsForList().leftPush("apiRequest", System.currentTimeMillis()); } else { Long start = (Long) redisTemplate.opsForList().index("apiRequest", -1); if ((System.currentTimeMillis() - start) < 60000) { throw new RuntimeException("超过限流阈值"); } else { redisTemplate.opsForList().leftPush("apiRequest", System.currentTimeMillis()); redisTemplate.opsForList().trim("apiRequest", -1, -1); } }核心思路:用一个list来存放一串值 , 每次请求都把当前时间放进 , 如果列表长度为1000 , 那么调用就是1000次 。如果第1000次调用时的当前时间和最初的时间差小于60s , 那么就是1分钟里调用超1000次 。否则 , 就清空列表之前的值
方法二:
Integer count = (Integer) redisTemplate.opsForValue().get("apiKey"); Integer integer = Optional.ofNullable(count).orElse(0); if (integer > 1000) { throw new RuntimeException("超过限流阈值"); } if (redisTemplate.getExpire("apiKey", TimeUnit.SECONDS).longValue() < 0) { redisTemplate.multi(); redisTemplate.opsForValue().increment("apiKey", 1); redisTemplate.expire("apiKey", 60, TimeUnit.SECONDS); redisTemplate.exec(); } else { redisTemplate.opsForValue().increment("apiKey", 1); }核心思路:设置key , 过期时间为1分钟 , 其值是api这分钟内调用次数
对比:方法一耗内存 , 限流准确 。方法二结果有部分误差 , 只限制key存在的这一分钟内调用次数低于1000次 , 不代表任意时间段的一分钟调用次数低于1000
【redis实现网关限流】
推荐阅读
-
-
新华网|邓超俞白眉:家乡不是抽象概念 是具体的人和事
-
3DM游戏网|《梦回盛世》v1.0.44正式版[war3地图]
-
『比尔』回顾东京周期:从奥运会四强到失奥运会门票,荷兰女排经历了什么
-
中关村在线|Switch梦寐以求的升级来了!任天堂下决心
-
爱辉科技一年当中,什么时候买手机最便宜?当属“两节一发布”
-
[寝室]男生寝室的关系可以“可怕”到什么程度?女生:比我们还狠!
-
车与鱼■耗时半年打造,配4缸,但无法上路,1.5L的“山寨”兰博基尼
-
航天小达人|张雨绮金晨绝美身材对比图出圈,一位丰满美一位骨感美,你喜欢哪种?
-
芒果台▲《夏夜知君暖》后,又一芒果台总裁剧走红,上线11天收视破3.2亿
-
农村以前常见的一种野草,总被当做猪饲料,现在市场200一斤
-
-
-
装修材料 厨房吊顶高度一般多高 厨房吊顶有哪些种类
-
浙江三门举行中国小海鲜博览会 “舌尖嘉年华”庆丰收
-
澳洲坚果树花期浇水方法 澳洲坚果树花期浇水方法视频
-
-
国产|张裕A半年业绩罕见双降 国产葡萄酒企业谋划抱团过冬
-
「趣头条」【我为什么选择吉利帝豪】忠于自己的喜爱!
-
米尔网|李嘉诚突然宣布!砸170亿支持华为,特朗普却迎来2大噩耗,