const (
tpsBucketToken = "TpsTokenBucket"
)
type tpsToken struct{}
// NewTpsToken 控制mysql tps
func NewTpsToken() *tpsToken {
return &tpsToken{}
}
func (t *tpsToken) InitTokenBucket(key string, cnt int) error {
globalRedis.Del(key)
for i := 1; i <= cnt; i++ {
_, err := globalRedis.SAdd(key, i).Result()
if err != nil {
return err
}
}
return nil
}
func (t *tpsToken) GetToken(key string) string {
token, err := globalRedis.SPop(key).Result()
if err == nil && token != "" {
return token
}
return ""
}
func (t *tpsToken) ReleaseToken(key, token string) (err error) {
_, err = globalRedis.SAdd(key, token).Result()
return
}


这是一个使用Golang编写的令牌桶限速器,通过Redis作为存储来控制MySQL的TPS(每秒事务数)。它包括初始化令牌桶、获取令牌、释放令牌的功能,能够有效地限制系统的处理速率。
最低0.47元/天 解锁文章
1251

被折叠的 条评论
为什么被折叠?



