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.
fork from redis_rate for go-redis
redis_rate requires a Go version with Modules support and uses import versioning. So please make sure to initialize a Go module before installing redis_rate:
go mod init github.com/my/repo
go get github.com/orientlu/redis_rate
Import:
import "github.com/orientlu/redis_rate"
import (
"fmt"
"github.com/gomodule/redigo/redis"
"github.com/orientlu/redis_rate"
)
var (
pool *redis.Pool
redisDialWriteTimeout = time.Second
redisDialReadTimeout = time.Minute
)
func init() {
pool = &redis.Pool{
MaxIdle: 10,
MaxActive: 100,
IdleTimeout: time.Duration(300) * time.Second,
Dial: func() (redis.Conn, error) {
return redis.DialURL("redis://:redis_@@@localhost:6379",
redis.DialReadTimeout(redisDialReadTimeout),
redis.DialWriteTimeout(redisDialWriteTimeout),
)
},
}
}
func main() {
limiter := redis_rate.NewLimiter(pool)
res, err := limiter.Allow("project:123", redis_rate.PerSecond(100))
if err != nil {
panic(err)
}
fmt.Printf("%+v\n", res)
}