To implement rate limiting, create a new limiter using redis_rate.NewLimiter(rdb) where rdb is a go-redis client. You can then call limiter.Allow(ctx, key, limit) to check if a request should be permitted.
Commonly used limiters include redis_rate.PerSecond(n).
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
}