限流
本文最后更新于343 天前,其中的信息可能已经过时,如有错误请发送邮件到3368129372@qq.com

单机限流

  1. Guava RateKimiter(google开源)
    示例代码:

    import com.google.common.util.concurrent.RateLimiter;
    public static void main(String[] args) {
    // 每秒限流5个请求
    RateLimiter limiter = RateLimiter.create(5.0);
    while (true) {
        if (limiter.tryAcquire()) {
            // 处理请求
        } else {
            // 超过流量限制,需要做何处理
        }
    }
    }

    分布式限流

    使用redission自带的限流器rateLimiteer

    @Resource
    RedissonClient redissonClient;
    
    public void doLimit(String key){
        RRateLimiter rateLimiter = redissonClient.getRateLimiter(key);
        rateLimiter.trySetRate(RateType.OVERALL,2,1, RateIntervalUnit.SECONDS);
        boolean b = rateLimiter.tryAcquire(2);
        if(!b){
            throw new BusinessException(ErrorCode.TO_MANY_REQUEST);
        }
    }

算法

  1. 固定窗口计数限流算法:最简单的限流算法之一,它将请求或事件的到达速率限制在固定的窗口内。例如,每秒最多允许处理 10 个请求。这个算法的问题在于它无法平滑处理请求,因为在窗口边界可能会出现瞬间的高负载。
  2. 滑动窗口计数限流算法:这种算法改进了固定窗口算法,使用滑动窗口来平滑处理请求。窗口内的请求计数按照时间的流逝而衰减,从而减少了窗口边界的尖峰负载。
  3. 令牌桶算法:令牌桶算法使用令牌桶来控制请求速率。令牌以固定的速率被添加到令牌桶中,每个请求需要从令牌桶中获取一个令牌才能被处理。如果令牌桶中没有足够的令牌,请求将被延迟或拒绝。这种算法平滑控制了请求速率,并且可以处理突发请求。
  4. 漏桶算法:漏桶算法以恒定的速率漏水,当请求到达时,会尝试向漏桶中添加请求,如果漏桶已满,则请求被拒绝。漏桶算法可以平滑请求,但不能处理突发请求。
感谢您的收看~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇