GitHub - go-redis/redis_rate: Rate limiting for go-redis (original) (raw)
Rate limiting for go-redis
❤️ Uptrace.dev - distributed traces, logs, and errors in one place
This package is based on rwz/redis-gcra and implementsGCRA (aka leaky bucket) for rate limiting based on Redis. The code requires Redis version 3.2 or newer since it relies onreplicate_commandsfeature.
Installation
redis_rate supports 2 last Go versions and requires a Go version withmodules support. So make sure to initialize a Go module:
go mod init github.com/my/repo
And then install redis_rate/v10 (note **_v10_** in the import; omitting it is a popular mistake):
go get github.com/go-redis/redis_rate/v10
Example
package redis_rate_test
import ( "context" "fmt"
"github.com/redis/go-redis/v9"
"github.com/go-redis/redis_rate/v10")
func ExampleNewLimiter() { ctx := context.Background() rdb := redis.NewClient(&redis.Options{ Addr: "localhost:6379", }) _ = rdb.FlushDB(ctx).Err()
limiter := redis_rate.NewLimiter(rdb)
res, err := limiter.Allow(ctx, "project:123", redis_rate.PerSecond(10))
if err != nil {
panic(err)
}
fmt.Println("allowed", res.Allowed, "remaining", res.Remaining)
// Output: allowed 1 remaining 9}