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.