Lewati ke konten

Referensi API Limiter

Package distlimit menyediakan coordinator rate-limiting thread-safe utama.

import "github.com/balramadan/distlimit"

Limiter mengoordinasikan pemeriksaan rate-limiting antara storage driver, aturan limit, dan strategi algoritma.

type Limiter struct
  • Thread Safety: Limiter 100% thread-safe dan didesain untuk penggunaan konkuren di banyak goroutine.

Membuat dan menginisialisasi instance Limiter baru.

func New(driver Driver, opts ...Option) (*Limiter, error)
  • driver (Driver): Driver penyimpanan backend (tidak boleh nil).
  • opts (...Option): Nol atau lebih opsi konfigurasi fungsional.
  • ErrNilDriver: Dikembalikan jika driver bernilai nil.
  • ErrInvalidLimit: Dikembalikan jika WithLimit bernilai $\le 0$.
  • ErrInvalidWindow: Dikembalikan jika WithWindow bernilai $\le 0$.

Mengevaluasi kuota rate limit untuk string key yang diberikan secara eksplisit.

func (l *Limiter) AllowKey(ctx context.Context, key string) (Result, error)
  • ctx (context.Context): Context eksekusi (diteruskan ke observer atau storage driver).
  • key (string): Key pengenal yang akan dibatasi (misal user_123, 192.168.1.1). Default ke "global" jika key kosong.

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)

Meng-nolkan kuota rate limit dan menghapus status untuk key tertentu di storage driver.

func (l *Limiter) ResetKey(ctx context.Context, key string) error

Memperbarui kebijakan rate limit default secara atomik saat runtime tanpa lock contention.

func (l *Limiter) UpdatePolicy(limit int64, window time.Duration)