SpringCloudGateway限流-RedisRateLimiter问题记录

引入RedisRateLimiter

1.类路径:

org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter
spring.cloud.gateway.redis-rate-limiter
在这里插入图片描述

2.内部类路径:

org.springframework.cloud.gateway.filter.ratelimit.RedisRateLimiter.Config
spring.cloud.gateway.redis-rate-limiter.replenishRate:最小值1
spring.cloud.gateway.redis-rate-limiter.burstCapacity:最小值1
在这里插入图片描述

3.进入isAllowed方法

redis两个key
request_rate_limiter.{id}.timestamp:最细维度到秒,当前时间
request_rate_limiter.{id}.tokens:当前时间戳对应令牌数
在这里插入图片描述

4.redis lua脚本处理

在这里插入图片描述

5.状态码

在这里插入图片描述

6.redis集群导致问题

io.lettuce.core.RedisCommandExecutionException: ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS array, and KEYS should not be in expression

在这里插入图片描述

在这里插入图片描述

报错解决方式
@see 
https://blog.csdn.net/qq_33996921/article/details/107204362
https://www.codeleading.com/article/99294719734/
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Cloud Gateway是一个构建在Spring Framework基础上的API网关,它可以用于实现负载均衡、路由转发、限流等功能。在进行限流操作时,Spring Cloud Gateway通常会使用一种称为令牌桶(Token Bucket)的算法。 令牌桶算法是一种简单有效的限流算法,它基于一个桶(Bucket)来存放一定数量的令牌(Token)。每个令牌表示一个可以访问服务的权限,当服务需要处理请求时,必须先获取一个令牌,如果桶中没有令牌,就需要等待。 通常情况下,Spring Cloud Gateway限流功能是通过在网关层面进行处理的。当请求到达网关时,网关会先检查请求是否超过限流规定的阈值,如果超过则拒绝请求,否则继续向后传递。这个限流操作并不会涉及到线程的变化。 而关于线程变为Redis的线程,可能是指在实际运行中,为了维护令牌桶算法所需的状态信息,可以将令牌桶的相关数据存储在Redis中,这样可以实现分布式限流,保证多个网关实例之间的限流规则一致性。 具体来说,可以在网关应用中使用Redis来存储令牌桶的Token信息,并使用Redis的分布式锁来保证多个网关实例之间对令牌桶的访问的互斥性,从而实现分布式限流的效果。这样,在实际运行中,网关处理请求时会从Redis中获取令牌桶的信息,并使用令牌桶算法进行限流操作。 总之,Spring Cloud Gateway限流功能并不会导致线程的变化。但为了实现分布式限流,可以将令牌桶的相关数据存储在Redis中,从而在网关处理请求时可以从Redis中获取令牌桶的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值