Skip to content

go-redis/redis_rate

Folders and files

NameName
Last commit message
Last commit date

Latest commit

8eadf45 · Apr 2, 2023

History

85 Commits
Nov 19, 2020
Jul 6, 2020
Jul 6, 2020
May 10, 2017
Dec 29, 2019
Jan 24, 2023
Jan 24, 2023
Apr 2, 2023
Apr 2, 2023
Jan 24, 2023
Jan 24, 2023
Jan 24, 2023
Sep 9, 2020

Repository files navigation

Rate limiting for go-redis

Build Status PkgGoDev

❤️ 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
}