View Source Overview
A clustered-Redis backend for the Hammer rate-limiter.
Hammer is a rate-limiter for the Elixir language. Its killer feature is a pluggable backend system, allowing you to use whichever storage suits your needs.
This package provides a clustered Redis backend for Hammer v7+, using the
eredis_cluster library. Compared
to the official single-node Hammer.Redis
backend, keys embed a {hash tag} so every window of a key stays on one
cluster slot.
To get started, read the Hammer Tutorial
first, then add the hammer_backend_eredis_cluster dependency:
def deps do
[
{:hammer_backend_eredis_cluster, "~> 2.0"},
{:hammer, "~> 7.0"}
]
end... then define a rate limiter with use Hammer and start it:
defmodule MyApp.RateLimit do
use Hammer, backend: Hammer.EredisCluster
end
# The cluster is connected elsewhere (e.g. `config :eredis_cluster, init_nodes: ...`):
MyApp.RateLimit.start_link([])
# Or let the limiter establish the connection itself:
MyApp.RateLimit.start_link(servers: [{"127.0.0.1", 7001}, {"127.0.0.1", 7002}])
{:allow, _count} = MyApp.RateLimit.hit("user_123", _scale_ms = :timer.minutes(1), _limit = 10)See the Hammer.EredisCluster module docs for all compile-time and runtime
options. Upgrading from 1.x (Hammer 6)? See the CHANGELOG for the breaking
changes.