finds.dev← search

// the find

go-redis/redis_rate

★ 1,024 · Go · BSD-2-Clause · updated Jun 2026

Rate limiting for go-redis

A GCRA-based rate limiter backed by Redis, implemented as a thin Go library. It runs the entire rate-limiting logic atomically in a Lua script on the Redis side, so there are no race conditions across multiple app instances. Aimed at Go services already using go-redis that need per-key distributed rate limiting without pulling in a separate service.

The Lua-script-in-Redis approach gives you atomic check-and-decrement in a single round-trip, which is the right way to do this. The Result struct exposes RetryAfter and ResetAfter, so callers can build proper 429 responses with Retry-After headers without guessing. The PerSecond/PerMinute/PerHour helpers make common cases one-liners. The codebase is small enough to read in an afternoon — lua.go and rate.go are the whole implementation.

No support for redis.ClusterClient or redis.Ring — the Lua EVAL approach only works against a single node or a sentinel setup, which will bite anyone running Redis Cluster. The README still references the old go-redis/redis import path while the example uses redis/go-redis, which is confusing and a frequent copy-paste trap. The Travis CI badge points to a dead pipeline, and there's no GitHub Actions workflow covering it. No built-in support for burst allowances beyond what GCRA inherently provides — if you want token-bucket semantics with a separate burst cap, you're extending this yourself.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →