Skip to content

fbelisk/ratelimiter

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ratelimiter

基于令牌桶算法的限流器,使用lock-free实现

安装

go get -u github.com/fbelisk/ratelimiter

快速开始

func main() {
	tb := New(10000, 1000, 1*time.Second) 

	for i := 0; i < 10; i++ {
		tokens, waitTime := tb.TakeWait(200, 1*time.Second)
	}
}

初始化

初始化入参分别是:令牌桶容量、单位间隔新增令牌数、间隔时长

tb := New(10000, 1000, 1*time.Second)

Take

向限流器申请指定数量的请求令牌,非阻塞

响应为实际可用令牌数量

tokens := tb.Take(10)

TakeWait

向限流器申请指定数量的请求许可,如果令牌桶内令牌数量不足,则阻塞,直到数量足够

入参分别为请求令牌数量和最长等待时间

响应为实际可用令牌数量和阻塞等待的时间

tokens, waitTime := tb.TakeWait(200, 1*time.Second)

About

lock free rate limiter for Go

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages