# Redis Backed Rate Limit
This library is inspired by and designed to be compatible with the [Upstash Rate Limit](https://github.com/upstash/ratelimit) library. This means you can have multiple JavaScript and Rust services operate on the same Redis keys and use the same rate limiting algorithms.
## Getting Started
Add the dependency
```shell
cargo add upstash-ratelimit
```
Use upstash_ratelimit to
```rust
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!")
}
```
## Running Unit Tests
Before running `cargo test`, spin up a Redis instance on `localhost` with `docker-compose up -d`. It's a good idea to restart Redis between test runs.
## Feature Support
- [x] Single region Redis
- [ ] Multi-region Redis
- [x] Fixed window limiting
- [ ] Sliding window limiting
- [ ] Token bucket limiting
- [ ] Cached fixed window limiting
- [x] Arbitrary key prefix
- [ ] Ephemeral (in-memory) cache
- [ ] Block until ready
- [ ] HTTP Redis connection
- This will require substantial effort and should probably reside in a separate library.
- [ ] Analytics
- This will require substantial efford and should probably reside in a separate library.