golang 使用rate实现redis qps令牌桶限流
参考: https://www.cnblogs.com/jackey2015/p/11843626.html
import "golang.org/x/time/rate"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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) } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步