springcloud gateway配置RedisRateLimiter限流无效但无报错信息,redis中无限流key

在学习SpringCloud Gateway的限流功能时,遇到RedisRateLimiter配置后限流无效且Redis中无法存入限流key的情况。尽管没有报错信息,通过分析源码发现异常处理被无声地掩盖,最终定位到问题在于Redis版本过低不支持'EVALSHA'命令。升级到Redis 5.0.5版本后,限流功能恢复正常。
摘要由CSDN通过智能技术生成

最近在学习springcloud gateway在学习限流时配置使用的RedisRateLimiter配置了限流,但是redis中无法存入key并且限流无效,但是后台却无报错信息,我使用的是springcloud版本是2.1.1.RELEASE

springcloud gateway限流教程 https://blog.csdn.net/forezp/article/details/85081162

分析源码控制限流的代码主要在RedisRateLimiter中的isAllowed方法

@Override
@SuppressWarnings("unchecked")
//根据keyresolver对request生成1个routeId,然后对该routeId采取其对应的限流
public Mono<Response> isAllowed(String routeId, String id) {
   if (!this.initialized.get()) {
      throw new IllegalStateException("RedisRateLimiter is not initialized");
   }

   Config routeConfig = loadConfiguration(routeId);

   // How many requests per second do you want a user to be allowed to do?1秒多少个请求
   int replenishRate = routeConfig.getReplenishRate();

   // How much bursting do you want to allow?令牌桶的总容量
   int burstCapacity = routeConfig.getBurstCapacity();

   try {
      //redis中存有上次请求的时间,上次桶中剩下的令牌数两个key
      List<String> keys = getKeys(id);

      // The arguments to the LUA script. time() returns unixtime in seconds.
      //执行脚本request_rate_limiter.lua(在gateway-core包中),请求中有四个参数 生成令牌速率,桶容量,当前时间,请求令牌数
      List<Stri
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值