高并发分布式限流
简单实现
单机版------Atomic 原子类
分布式版----Redis 缓存
代码示例:
一个时间窗内的请求限流![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/8f1ef7b2942bbada7884f3238ef02442.png)
单机版------guava
简单实现,但是用于单机
分布式限流版 每秒请求数,redis
不足:if 执行时间过长,可能导致缓存时间边长。
改进:redis + lua
一次实现多个redis操作----lua脚本保证多操作,原子性
平滑限流实现
时间窗口限流的弊端见下图
单机版-----令牌桶]
手写以上:
分布式版实现------平滑限流
1、取令牌lua脚本
2、放令牌:lua脚本
取令牌:java
放令牌:java
java 调用实例: