- 添加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实现网关限流】
推荐阅读
-
自然疗法能击退衰老 揭秘各国传统抗衰老秘诀 准妈妈接触香水指甲油容易早产 早产的紧急措施
-
快舟十一号|B站回应快舟十一号首飞失利 发射计划不会停止
-
『爵士浩南』iPhone使用中常见的五大错误,学会你就是老司机!
-
-
社保精算师|我妈交了10万,养老金仅1111元?灵活就业人员参保划算吗,社保
-
别样APP|姗姗来迟的捐款以及声明,能为品牌挽回形象吗?,adidas
-
-
-
-
-
『教育部』教育部最新通知,千万教师迎来好消息,基本工资提升年底前须完成
-
【社会谈资】妹妹毕业后一直宅家里,天天好吃懒做!,爆笑妹妹面试经典冷笑话
-
第一财经|财经夜行线0831丨全球市场涨跌互现利好消息推高国际油价
-
北京发布会:无症状感染者谢某某密接者均为阴性 万达广场外环境样本185件均为阴性
-
-
微微带你笑|幽默段子:中国乒乓球运动员拿了奥运冠军后的打算,原创
-
韩国|韩国物价高、就业难的现状,造就了一个奇特的群体:候鸟爸爸
-
带我回家|男友带我回家,准婆婆做了一桌子菜,我刚吃了两口,她就摔了碗筷
-
海外网|俄媒:俄罗斯计划10月中旬前注册第二款新冠疫苗
-