Dati di baseAPI

Rate limiting

Rate limit atomici lato server. GCRA in un solo comando, oppure limiter con nome a finestra scorrevole, token bucket o leaky bucket. Niente Lua.

comando atomico per richiesta
1
algoritmi
4
script Lua
0
Passo 1 di 5
Consentita

10 richieste al minuto per l'utente 42. La risposta dice consentita, il limite e quante ne restano.

Sessione di esempioplaying
# Consentita
hotkv> GCRA.LIMIT ratelimit:user:42 60000 10
1) (integer) 0
2) (integer) 10
3) (integer) 9
4) (integer) -1
5) (integer) 6000

Una dimostrazione animata con comandi HotKV reali e risposte di esempio. Clicca su un passo qualsiasi per andarci. Comandi e risposte restano in inglese, esattamente come li digiti e li vedi in HotKV.

Il problema

Un'API senza limiti è a un solo client scorretto da un disservizio. Fare il controllo nel codice dell'applicazione significa una lettura, un calcolo e una scrittura, e le richieste concorrenti passano negli spazi tra un'operazione e l'altra. Molti team finiscono per mantenere uno script Lua solo per renderlo atomico.

Come lo gestisce HotKV

GCRA.LIMIT decide e registra in un solo passo, quindi due client concorrenti non possono passare entrambi sullo stesso stato, e il limite si ricarica in modo regolare invece di azzerarsi ai confini della finestra. Per i limiti che gestisci per nome, RATELIMIT.CREATE configura un limiter a finestra scorrevole, token bucket o leaky bucket con statistiche su cosa ha consentito e negato.

Passo dopo passo

Cosa succede, comando per comando

  1. 01

    Consentita

    10 richieste al minuto per l'utente 42. La risposta dice consentita, il limite e quante ne restano.

    GCRA.LIMIT ratelimit:user:42 60000 10
  2. 02

    Una raffica da un bot

    Lo scraper esaurisce il suo margine di burst e poi gli viene detto quanto aspettare. Una richiesta negata non cambia nulla.

    GCRA.LIMIT ratelimit:bot:7 60000 10
  3. 03

    Limiter con nome per un piano

    I clienti del piano gratuito hanno 100 richieste al minuto su una finestra scorrevole.

    RATELIMIT.CREATE free_plan 100 60000 ALGO sliding_window
  4. 04

    Richiesta pesata

    Un endpoint di esportazione costa 20 unità, quindi consuma una parte maggiore della quota.

    RATELIMIT.CHECK free_plan customer:881 COST 20
  5. 05

    Guarda cosa ha fatto il limiter

    Impostazioni, chiavi tracciate e totali delle richieste consentite e negate.

    RATELIMIT.STATS free_plan
Dove si usa

Scenari reali

API pubbliche

Ogni chiave API riceve un limite per piano, con burst per i client corretti e un Retry-After preciso per gli altri.

Moduli di login e registrazione

I tentativi per IP e per account sono limitati per rallentare il credential stuffing.

Chiamate in uscita

Le chiamate a un'API partner o a un provider LLM restano sotto la loro quota su tutti i worker della flotta.

Integrato

Cosa ottieni

GCRA in un solo comando

Ricarica regolare con burst, controllo e aggiornamento atomici, un tempo di attesa in caso di rifiuto.

GCRA.LIMITGCRA.RESET

Limiter con nome

Finestra scorrevole, token bucket o leaky bucket, creati una volta e controllati per chiave.

RATELIMIT.CREATERATELIMIT.CHECK

Richieste pesate

Le chiamate costose possono contare come più richieste. GCRA.LIMIT accetta un conteggio, RATELIMIT.CHECK un COST.

COST

Statistiche

Totali di richieste consentite e negate per limiter.

RATELIMIT.STATS

Domande frequenti

Mi serve uno script Lua per il rate limiting?

No. Sia GCRA.LIMIT sia RATELIMIT.CHECK eseguono l'intero controllo come un unico comando atomico.

Quale dovrei usare?

GCRA.LIMIT non richiede configurazione e funziona su ogni piano. I limiter con nome RATELIMIT.* aggiungono la scelta dell'algoritmo e le statistiche, e fanno parte dei piani Performance e Scale.

Quanto costa una richiesta negata?

Niente. Una chiamata GCRA negata lascia il limiter invariato, quindi un client che riprova non viene penalizzato ulteriormente.

Casi d'uso correlati

Provalo sul tuo carico di lavoro

HotKV parla il protocollo Redis, quindi puoi puntarci un client esistente ed eseguire questi stessi comandi.