目录
reserveAndGetWaitLength
reserveEarliestAvailable
令牌桶算法
令牌桶算法就是以固定速率生成令牌放入桶中,每个请求都需要从桶中获取令牌,没有获取到令牌的请求会被阻塞限流(桶中的令牌不够的时候);只要能从桶里取出令牌就能通过。
当令牌消耗速度小于生成的速度时,令牌桶内就会预存这些未消耗的令牌(直到桶的上限);当有突发流量进来时,可以直接从桶中取出令牌,而不会被限流,从而支持突发流量的快速处理。
Guava-RateLimiter
不管是令牌桶算法还是漏桶算法都可以用延迟计算的方式来实现,延迟计算指的是不需要单独的线程来定时生成令牌或者从漏桶中定时取出请求,而是由调用限流器的线程自己去计算是否有足够的令牌以及需要sleep的时间,延迟计算的方式可以节省一个线程资源。
Guava 的 RateLimiter 是一个用于控制访问速率的工具类,常用于限流(如每秒处理请求的数量)。它基于令牌桶算法实现。
数据模型
| 英文名称 |
中文名称 |
备注 |
| permitsPerSecond |
每秒允许许可数量 |
|
| 桶容量 |
maxBurstSeconds * permitsPerSecond默认 maxBurstSeconds=1 |
示例
| // 创建一个每秒允许 10 |


86万+

被折叠的 条评论
为什么被折叠?



