go語言實現(xiàn)令牌桶限流

簡單實現(xiàn)令牌桶,復(fù)制即可用

package main

import (
    "fmt"
    "log"
    "time"
)

var startTime = time.Now()

func main() {
    bucket()
}
//令牌桶案例
func bucket() {
    quantum := int64(1)
    rate := float64(2)
    capacity := int64(2)
    count := int64(1)
    fillInterval := time.Duration(1e9 * float64(quantum) / rate)
    fmt.Printf("fillInterval : %d \n", fillInterval)
    availableTokens := int64(2)

    var lastTick int64

    t := time.NewTicker(400 * time.Millisecond)

    for e := range t.C {
        //當前時間與服務(wù)啟動時間的差值,除以時間間隔 -> 算出數(shù)量
        tick := int64(time.Now().Sub(startTime) / fillInterval)
        if availableTokens >= capacity {
            fmt.Printf("ok use [%d]\n", availableTokens)
        } else {
            //兩個相減,算出真正的可用數(shù)量
            availableTokens += (tick - lastTick) * quantum
            fmt.Printf("tick - lastTick : %d\n", availableTokens)
            if availableTokens > capacity {
                availableTokens = capacity
            }
            lastTick = tick
        }
        if availableTokens <= 0 {
            log.Println("no availableTokens")
        } else {
            if count > availableTokens {
                count = availableTokens
            }
            availableTokens -= count
            fmt.Printf("[%+v], availableTokens has [%d]\n", e, availableTokens)
        }

    }
}


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 緩存 緩存比較好理解,在大型高并發(fā)系統(tǒng)中,如果沒有緩存數(shù)據(jù)庫將分分鐘被爆,系統(tǒng)也會瞬間癱瘓。使用緩存不單單能夠提升...
    阿斯蒂芬2閱讀 12,832評論 1 28
  • 項目需要使用限流措施,查閱后主要使用令牌桶算法實現(xiàn),為了更靈活的實現(xiàn)限流,就自己實現(xiàn)了一個簡單的基于令牌桶算法的限...
    begonia_rich閱讀 26,375評論 6 19
  • 聊聊高并發(fā)系統(tǒng)限流特技-1來自開濤的博客 在開發(fā)高并發(fā)系統(tǒng)時有三把利器用來保護系統(tǒng):緩存、降級和限流。緩存的目的是...
    meng_philip123閱讀 6,865評論 1 20
  • 摘要:在開發(fā)高并發(fā)系統(tǒng)時有三把利器用來保護系統(tǒng):緩存、降級和限流。而有些場景并不能用緩存和降級來解決,因此需有一種...
    落羽成霜丶閱讀 2,236評論 0 18
  • 我旅游過許多的地方,有美麗無比的西安;有科技發(fā)達的北京;有擁有遼闊草原的內(nèi)蒙古;有風(fēng)味獨特的平遙;??但我印...
    bf307a6672d6閱讀 269評論 0 0

友情鏈接更多精彩內(nèi)容