Categorygithub.com/shareed2k/go_limiter
modulepackage
0.0.8
Repository: https://github.com/shareed2k/go_limiter.git
Documentation: pkg.go.dev

# README

Rate limiting with few algorithms (Sliding Window, Leaky Bucket)

Build Status

This package is based on go-redis/redis_rate 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

go_limiter requires a Go version with Modules support and uses import versioning. So please make sure to initialize a Go module before installing go_limiter:

go get github.com/shareed2k/go_limiter

Import:

import "github.com/shareed2k/go_limiter"

Examplle

import (
	"log"
	"time"

	"github.com/go-redis/redis/v8"

	"github.com/shareed2k/go_limiter"
)

func main() {
	option, err := redis.ParseURL("redis://127.0.0.1:6379/0")
	if err != nil {
		log.Fatal(err)
	}
	client := redis.NewClient(option)
	_ = client.FlushDB().Err()

	limiter := go_limiter.NewLimiter(client)
	res, err := limiter.Allow("api_gateway_cache:klu4ik", &go_limiter.Limit{
		// or you can use go_limiter.SlidingWindowAlgorithm
		Algorithm: go_limiter.GCRAAlgorithm,
		Rate:      10,
		Period:    2 * time.Minute,
		Burst:     10,
	})

	if err != nil {
		log.Fatal(err)
	}

	log.Println("===> ", res.Allowed, res.Remaining)
	// Output: true 1
}
 

# Packages

No description provided by the author

# Functions

No description provided by the author
No description provided by the author
NewLimiter returns a new Limiter.

# Constants

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Structs

No description provided by the author
Limiter controls how frequently events are allowed to happen.
No description provided by the author

# Interfaces

No description provided by the author