#rate-limiting #lazy-evaluation #bucket #tokens #token-bucket #futures-aware #algorithm

leaky-bucket-lite

精简版的,懒加载且具有未来感知能力的速率限制器实现

15个版本 (4个重大更新)

0.5.2 2022年2月17日
0.5.1 2021年12月26日
0.4.0 2021年12月26日
0.3.2 2021年9月23日
0.1.4 2021年1月20日

#token-bucket分类中排名6

Download history 376/week @ 2024-04-02 238/week @ 2024-04-09 226/week @ 2024-04-16 314/week @ 2024-04-23 273/week @ 2024-04-30 283/week @ 2024-05-07 254/week @ 2024-05-14 227/week @ 2024-05-21 235/week @ 2024-05-28 171/week @ 2024-06-04 185/week @ 2024-06-11 234/week @ 2024-06-18 272/week @ 2024-06-25 100/week @ 2024-07-02 199/week @ 2024-07-09 171/week @ 2024-07-16

每月下载量789
3个crate中使用(通过rosu-v2

MIT/Apache

31KB
485 代码行

leaky-bucket-lite

docs badge crates badge actions badge

基于漏桶算法的令牌速率限制器,主要是对udoprog的漏桶算法的懒实现,具有更少的依赖和开销。

如果令牌已经可用,将通过快速路径立即获取,并将获取的令牌数量添加到桶中。

如果没有,尝试获取令牌的任务将被挂起,直到添加所需的令牌数量。

用法

将以下内容添加到您的Cargo.toml

leaky-bucket-lite = "0.4"

功能

leaky-bucket-lite提供3种实现

要使用parking_lot的锁定对象提高潜在性能,并使用sync-threadsafetokio,请启用parking_lot功能。

示例

use leaky_bucket_lite::LeakyBucket;
use std::time::Duration;

#[tokio::main]
async fn main() {
    let rate_limiter = LeakyBucket::builder()
        .max(5)
        .tokens(0)
        .refill_interval(Duration::from_secs(1))
        .refill_amount(1)
        .build();

    println!("Waiting for permit...");
    // should take about 5 seconds to acquire.
    rate_limiter.acquire(5).await;
    println!("I made it!");
}

依赖关系

~2–8MB
~49K SLoC