golang 使用rate实现redis qps令牌桶限流


参考: https://www.cnblogs.com/jackey2015/p/11843626.html

 import "golang.org/x/time/rate"

func newLimiter() *rate.Limiter{
	limit := rate.Every(10 * time.Microsecond)
	limiter := rate.NewLimiter(limit, 1)
	return limiter
}
func xiaofeiToken(limiter *rate.Limiter) {
	ok := limiter.Allow()
	if !ok {
		fmt.Println("限流ing")
	}else {
		fmt.Println("获得令牌",time.Now())
	}
}
func TestLimiter(t *testing.T) {
	limiter := newLimiter()
	for i:=0;i<100;i++ {
		xiaofeiToken(limiter)
		time.Sleep(50*time.Millisecond)
	}
	time.Sleep(2000*time.Millisecond)
	fmt.Println("第二春")
	for j:=0;j<100;j++ {
		fmt.Println(j)
		go xiaofeiToken(limiter)
		//time.Sleep(50*time.Millisecond)
	}
}

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM