speedbump

A Redis-backed rate limiter in Go

Github stars Tracking Chart

speedbump GoDoc

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!
...

Main metrics

Overview
Name With Owneretcinit/speedbump
Primary LanguageGo
Program languageGo (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2015-04-18 22:47:36
Pushed At2022-03-28 19:17:09
Last Commit At2016-07-26 21:47:23
Release Count5
Last Release Namev2.0.0 (Posted on )
First Release Namev0.1.0 (Posted on )
用户参与
Stargazers Count116
Watchers Count6
Fork Count10
Commits Count33
Has Issues Enabled
Issues Count1
Issue Open Count1
Pull Requests Count7
Pull Requests Open Count2
Pull Requests Close Count1
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private