https://github.com/savonarola/token_bucket
Rate limiter implementing Token Bucket algorithm
https://github.com/savonarola/token_bucket
bucket-algorithm rate-limits
Last synced: 8 months ago
JSON representation
Rate limiter implementing Token Bucket algorithm
- Host: GitHub
- URL: https://github.com/savonarola/token_bucket
- Owner: savonarola
- License: mit
- Created: 2018-05-06T18:36:21.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2018-05-06T20:40:59.000Z (about 8 years ago)
- Last Synced: 2025-07-17T14:23:13.192Z (11 months ago)
- Topics: bucket-algorithm, rate-limits
- Language: Elixir
- Size: 10.7 KB
- Stars: 4
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[](https://travis-ci.org/savonarola/token_bucket)
[](https://coveralls.io/github/savonarola/token_bucket?branch=master)
# TokenBucket
Rate limiter implementing Token Bucket algorithm https://en.wikipedia.org/wiki/Token_bucket
## Installation
The package can be installed
by adding `token_bucket` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[
{:token_bucket, "~> 0.1.0"}
]
end
```
## Usage
```elixir
# Bucket size 10000, add 1000 tokens to bucket each second.
# This allows peaks of load in 10000 tokens (requests) in a moment and still keeps average load
# below 1000 tokens per second.
{:ok, pid} = TokenBucket.start_link(10_000, 1_000)
true = TokenBucket.consume(pid, 1)
# Equivalently
true = TokenBucket.consume(pid)
```
More precise tuning:
```elixir
# Bucket size 2, add 1 token to bucket each 100 ms.
{:ok, pid} = TokenBucket.start_link(2, {1, 100})
true = TokenBucket.consume(pid)
true = TokenBucket.consume(pid)
false = TokenBucket.consume(pid)
:timer.sleep(120)
true = TokenBucket.consume(pid)
false = TokenBucket.consume(pid)
```
Using arbitrary `GenServer` options:
```elixir
# Register locally as `:my_limiter`.
{:ok, pid} = TokenBucket.start_link(10_000, 1_000, name: :my_limiter)
```
## LICENSE
This software is licensed under [MIT License](LICENSE).