Building a Token Bucket: Refilling Tokens
Token savatini qurish: tokenlarni to'ldirish
Oldingi darsdagi savat faqat bo'shashi mumkin edi — hech qachon to'lmaydi. Haqiqiy rate limiter esa vaqt o'tishi bilan tokenlarni qayta to'ldirishi kerak, aks holda bir marta tugagan klient abadiy bloklanib qoladi. Eng sodda qadam — tokenlarni qo'lda to'ldiradigan metod qo'shish, sig'imdan oshib ketmasligini ta'minlab:
func (b *TokenBucket) Refill(n int) {
b.tokens += n
if b.tokens > b.capacity {
b.tokens = b.capacity
}
}Bu — Cache Eviction darsidagi TTL g'oyasiga o'xshaydi: xuddi eskirgan yozuvlarni tozalash kerak bo'lganidek, bu yerda ham holatni (tokens) tashqi hodisa (vaqt o'tishi) asosida yangilab turish kerak. if b.tokens > b.capacity tekshiruvi — savat haqiqiy sig'imidan oshib ketmasligini kafolatlaydigan chegara sharti.
>_ Exercise
Oldingi darsdagi TokenBucketga Refill(n int) metodini qo'shing. U tokensni nga oshiradi, lekin natija capacitydan oshib ketsa, tokensni capacityga tenglashtiradi.
Stuck? Reveal a hint to help you.
Key Takeaway
Key Takeaway:
Refill savatga tokenlarni qaytaradi, lekin uni capacity bilan chegaralaydi — savat hech qachon dastlabki sig'imidan ko'p token saqlay olmaydi. Bu keyingi darsda vaqtga asoslangan avtomatik to'ldirishning poydevori.
NEXT UP
Refilling Tokens Over Time
$ go run main.go
Kodingizni ishga tushiring