Home
Softono

Redis Rate

Open source BSD-2-Clause Go
1K
Stars
108
Forks
40
Issues
11
Watchers
3 months
Last Commit

 About Redis Rate

Rate limiting for go-redis

Platforms

Web Self-hosted

Languages

Go

Need Help Installing Redis Rate?

We provide expert installation service for this software. Our team will install, configure, and secure Redis Rate on your server. plans start at just $30.

Redis Rate

View on GitHub

Rate limiting for go-redis

Build Status PkgGoDev

:heart: Uptrace.dev - distributed traces, logs, and errors in one place

This package is based on rwz/redis-gcra and implements GCRA (aka leaky bucket) for rate limiting based on Redis. The code requires Redis version 3.2 or newer since it relies on replicate_commands feature.

Installation

redis_rate supports 2 last Go versions and requires a Go version with modules support. So make sure to initialize a Go module:

go mod init github.com/my/repo

And then install redisrate/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
}