golang redis 令牌桶

这是一个使用Golang编写的令牌桶限速器,通过Redis作为存储来控制MySQL的TPS(每秒事务数)。它包括初始化令牌桶、获取令牌、释放令牌的功能,能够有效地限制系统的处理速率。
摘要由CSDN通过智能技术生成

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值