#速率限制 #redis #兼容 #upstash #限制器 #响应

upstash-ratelimit

Upstash ratelimit 兼容速率限制库

1 个不稳定版本

0.1.0 2023年7月7日

#4#upstash

MIT 许可证

9KB
151

Redis 支持的速率限制

这个库受 Upstash 速率限制 库的启发,并设计为与其兼容。这意味着多个 JavaScript 和 Rust 服务可以在相同的 Redis 键上运行并使用相同的速率限制算法。

入门

添加依赖

cargo add upstash-ratelimit

使用 upstash_ratelimit

use upstash_ratelimit::{Limiter, RateLimit, Response};

let redis = redis::Client::open("redis://127.0.0.1/")?;

let ratelimit = RateLimit::builder()
    .redis(REDIS.clone())
    .limiter(Limiter::FixedWindow {
        tokens: 30,
        window: Duration::from_millis(100),
    })
    .build()?;

let response = ratelimit.limit("unique-id");

match result {
    Response::Success { .. } => println!("Allow!")
    Response::Failure { .. } => println!("Rate limited!")
}

运行单元测试

在运行 cargo test 之前,在 localhost 上启动 Redis 实例,使用 docker-compose up -d。在测试运行之间重新启动 Redis 是一个好主意。

功能支持

  • 单区域 Redis
  • 多区域 Redis
  • 固定窗口限制
  • 滑动窗口限制
  • 令牌桶限制
  • 缓存的固定窗口限制
  • 任意键前缀
  • 临时(内存中)缓存
  • 等待直到就绪
  • HTTP Redis 连接
    • 这需要大量工作,可能应该位于单独的库中。
  • 分析
    • 这需要大量工作,可能应该位于单独的库中。

依赖关系

~3MB
~83K SLoC