0Pricing
Lua Academy · Lezione

Limitazione della frequenza con Lua

Implementi in modo atomico rate limiter a finestra scorrevole in Redis Lua.

Limitazione della frequenza con Lua è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.

Perché usare Redis per il rate limiting?

Redis offre operazioni atomiche, velocità garantita dalla memoria e uno stato condiviso tra più server applicativi, caratteristiche che lo rendono ideale per il rate limiting distribuito.

Contatore con finestra fissa semplice

Conteggi le richieste per ogni finestra temporale usando INCR ed EXPIRE.

EVAL "
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local count = redis.call('INCR', key)
if count == 1 then
  redis.call('EXPIRE', key, window)
end
if count > limit then
  return 0  -- rejected
end
return 1  -- allowed
" 1 rate:user:123 100 60

Finestra scorrevole con set ordinati

Un rate limiter più accurato utilizza un set ordinato indicizzato tramite timestamp. Rimuova le voci obsolete, aggiunga la richiesta corrente e conteggi gli elementi del set.

EVAL "
local key = KEYS[1]
local now = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local limit = tonumber(ARGV[3])
redis.call('ZREMRANGEBYSCORE', key, 0, now - window * 1000)
redis.call('ZADD', key, now, now .. math.random())
redis.call('EXPIRE', key, window)
local count = redis.call('ZCARD', key)
if count > limit then return 0 end
return 1
" 1 slidingRate:user:123 1706000000000 60 100

Algoritmo del token bucket

Un token bucket consente dei picchi mantenendo una velocità media. Ricarichi i token nel tempo; ogni richiesta consuma un token.

Algoritmo del leaky bucket

Il leaky bucket impone una velocità costante rigorosa. Le richieste vengono accodate (nel bucket) ed elaborate a una velocità di svuotamento fissa. Le richieste eccedenti vengono rifiutate.

Limiti per utente e per IP

Indicizzi il rate limiter tramite ID utente, chiave API o indirizzo IP: rate:{userId}, rate:{ip}, rate:{apiKey}.

Limiti di frequenza a livelli

Applichi limiti diversi in base al livello dell'utente (free o pro). Verifichi il livello dell'utente prima di scegliere quale limite applicare.

EVAL "
local tier = redis.call('HGET', 'user:tier', ARGV[1])
local limit = tier == 'pro' and 10000 or 1000
-- ... rest of rate limit check
" 0 "userId123"

Restituzione degli header

Restituisca dal script il numero di richieste rimanenti e il tempo di ripristino, in modo che l'applicazione possa impostare gli header X-RateLimit nella risposta HTTP.

return {allowed, limit - count, resetTime}

Garanzia atomica distribuita

Poiché l'intero controllo del limite di frequenza si trova in un unico script EVAL, l'operazione è atomica tra tutte le istanze dei server applicativi che condividono il cluster Redis.

Nota sul cluster Redis

In modalità Redis Cluster, tutte le KEYS utilizzate in uno script devono essere sottoposte a hashing nello stesso slot. Utilizzi gli hash tag: rate:{user123}:requests per forzare la collocazione nello stesso slot.

Monitoraggio dei limiti di frequenza

Registri le richieste rifiutate con le informazioni sull'utente o sull'IP. Configuri avvisi quando la percentuale di rifiuti aumenta bruscamente (indica un attacco o una configurazione errata).

Domanda sul rate limiting

Perché uno script Lua di Redis è migliore per il rate limiting rispetto ai contatori gestiti dall'applicazione?

Riepilogo: rate limiting con Lua

Implementi i rate limiter in Lua su Redis usando INCR+EXPIRE (finestra fissa) o set ordinati (finestra scorrevole). Lo script atomico garantisce la correttezza tra server applicativi distribuiti. Restituisca la quota rimanente per gli header HTTP.

Domande Frequenti

La lezione «Limitazione della frequenza con Lua» è gratuita?

Sì — il testo completo di «Limitazione della frequenza con Lua» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.

Cosa imparerò in «Limitazione della frequenza con Lua»?

Implementi in modo atomico rate limiter a finestra scorrevole in Redis Lua. Eserciti Lua Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Lua Academy?

Non è richiesta alcuna esperienza precedente. Lua Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Limitazione della frequenza con Lua»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Lua Academy?

Sì. Ogni lezione Lua Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. EVAL e ambiente Lua di Redis
  2. Operazioni atomiche e transazioni
  3. Limitazione della frequenza con Lua
  4. SCRIPT LOAD ed EVALSHA
← Torna a Lua Academy