Referensi API Limiter
Package distlimit menyediakan coordinator rate-limiting thread-safe utama.
import "github.com/balramadan/distlimit"Struct Limiter
Section titled “Struct Limiter”Limiter mengoordinasikan pemeriksaan rate-limiting antara storage driver, aturan limit, dan strategi algoritma.
type Limiter struct- Thread Safety:
Limiter100% thread-safe dan didesain untuk penggunaan konkuren di banyak goroutine.
Konstruktor
Section titled “Konstruktor”Membuat dan menginisialisasi instance Limiter baru.
func New(driver Driver, opts ...Option) (*Limiter, error)Parameter
Section titled “Parameter”driver(Driver): Driver penyimpanan backend (tidak bolehnil).opts(...Option): Nol atau lebih opsi konfigurasi fungsional.
ErrNilDriver: Dikembalikan jikadriverbernilainil.ErrInvalidLimit: Dikembalikan jikaWithLimitbernilai $\le 0$.ErrInvalidWindow: Dikembalikan jikaWithWindowbernilai $\le 0$.
Method Evaluasi Utama
Section titled “Method Evaluasi Utama”AllowKey
Section titled “AllowKey”Mengevaluasi kuota rate limit untuk string key yang diberikan secara eksplisit.
func (l *Limiter) AllowKey(ctx context.Context, key string) (Result, error)Parameter
Section titled “Parameter”ctx(context.Context): Context eksekusi (diteruskan ke observer atau storage driver).key(string): Key pengenal yang akan dibatasi (misaluser_123,192.168.1.1). Default ke"global"jika key kosong.
Nilai Kembalian
Section titled “Nilai Kembalian”Mengembalikan struct Result yang berisi metadata evaluasi:
type Result struct { Allowed bool // true jika request diizinkan, false jika diblokir Limit int64 // Kapasitas kuota maksimum yang dikonfigurasi Remaining int64 // Sisa request yang tersedia pada window aktif ResetIn time.Duration // Sisa waktu hingga kuota di-reset}Mengevaluasi kuota rate limit menggunakan key yang diekstrak oleh KeyFunc yang terkonfigurasi.
func (l *Limiter) Allow(ctx context.Context) (Result, error)ResetKey
Section titled “ResetKey”Meng-nolkan kuota rate limit dan menghapus status untuk key tertentu di storage driver.
func (l *Limiter) ResetKey(ctx context.Context, key string) errorUpdatePolicy
Section titled “UpdatePolicy”Memperbarui kebijakan rate limit default secara atomik saat runtime tanpa lock contention.
func (l *Limiter) UpdatePolicy(limit int64, window time.Duration)