Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

etcinit/speedbump

Repository files navigation

A Redis-backed Rate Limiter for Go

wercker status

Cool stuff

  • Backed by Redis, so it keeps track of requests across a cluster
  • Extensible timing functions. Includes defaults for tracking requests per second, minute, and hour
  • Works with IPv4, IPv6, or any other unique identifier
  • Example middleware included for Gin (See: ginbump) and Negroni (See: negronibump)

Versions

Branch Go Get Command Client Version -
v2 go get gopkg.in/etcinit/speedbump.v2 gopkg.in/redis.v5 Link
v1, master go get gopkg.in/etcinit/speedbump.v1 gopkg.in/redis.v3 Link
v0 go get gopkg.in/etcinit/speedbump.v0 gopkg.in/redis.v2 Link

Usage

  • Get a working Redis server
  • Go get:
$ go get github.com/etcinit/speedbump
  • Include it in your code
package main
import (
	"fmt"
	"time"
	"github.com/etcinit/speedbump"
	"gopkg.in/redis.v5"
)
func main() {
	client := redis.NewClient(&redis.Options{
		Addr: "localhost:6379",
		Password: "",
		DB: 0,
	})
	hasher := speedbump.PerSecondHasher{}
	// Here we create a limiter that will only allow 5 requests per second
	limiter := speedbump.NewLimiter(client, hasher, 5)
	for {
		// This example has a hardcoded IP, but you would replace it with the IP
		// of a client on a real case.
		success, err := limiter.Attempt("127.0.0.1")
		if err != nil {
			panic(err)
		}
		if success {
			fmt.Println("Successful!")
		} else {
			fmt.Println("Limited! :(")
		}
		time.Sleep(time.Millisecond * time.Duration(100))
	}
}
  • Output:
Successful!
Successful!
Successful!
Successful!
Successful!
Successful!
Limited! :(
Limited! :(
Limited! :(
Limited! :(
Limited! :(
Successful!
Successful!
Successful!
Successful!
Successful!
Successful!
Limited! :(
Limited! :(
Limited! :(
Limited! :(
Successful!
Successful!
...

About

A Redis-backed rate limiter in Go

Topics

Resources

License

Stars

Watchers

Forks

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /