Skip to content

mayouzi/go_redis_rate_limiter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

rate limiter with Redis

Install

go get github.com/mayouzi/go_redis_rate_limiter

Usage

package main

import (
	"fmt"
	"github.com/go-redis/redis/v8"
	rate "github.com/mayouzi/go_redis_rate_limiter"
	"log"
)

type Resource struct {
	prefix string
}

func (r *Resource) Key(idf string) string {
	return fmt.Sprintf("%s%s", r.prefix, idf)
}

func main() {
	client := redis.NewClient(&redis.Options{
		Addr:     "localhost:6379",
		Password: "",
		DB:       2,
	})

	key := "/user/profile"

	resource := &Resource{
		prefix: "_api_qps_",
	}
	limiter, err := rate.NewRateLimiter(client, 20, 1, resource)
	if err != nil {
            panic(err)
	}

	result, err := limiter.Usage(key)
	if err != nil {
            panic(err)
	}

	if result.Pass {
            log.Printf("pass, already number: %d", result.Usage)
        } else {
            log.Printf("need wailt: %v", result.Wait)
        }
    }
}