Lua Academy · Les

Rate limiting met Lua

Implementeer atomair sliding-window-rate limiters in Redis Lua

Les 3 van 413 stappen

Rate limiting met Lua is een gratis Lua Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Lua Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Lua Academy bevat in totaal 4 lessen.

Waarom Redis voor snelheidsbeperking?

Redis biedt atomische bewerkingen, snelheid dankzij opslag in het geheugen en gedeelde toestand tussen meerdere toepassingsservers — daardoor is het ideaal voor gedistribueerde snelheidsbeperking.

Eenvoudige teller voor een vast tijdvenster

Tel verzoeken per tijdvenster met INCR en 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

Glijdend venster met gesorteerde verzamelingen

Een nauwkeurigere snelheidsbeperker gebruikt een gesorteerde verzameling met tijdstempels als sleutels. Verwijder oude vermeldingen, voeg het huidige verzoek toe en tel de grootte van de verzameling.

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

Tokenbucketalgoritme

Een tokenbucket staat piekbelasting toe en behoudt tegelijk een gemiddelde snelheid. Vul tokens na verloop van tijd bij; elk verzoek verbruikt één token.

Lekbakalgoritme

De lekbak dwingt een strikt constant tempo af. Verzoeken worden in een wachtrij (de bak) geplaatst en met een vaste afvoersnelheid verwerkt. Overloop wordt geweigerd.

Limieten per gebruiker en per IP

Gebruik de gebruikers-ID, API-sleutel of het IP-adres als sleutel voor de snelheidsbeperker: rate:{userId}, rate:{ip}, rate:{apiKey}.

Snelheidslimieten per niveau

Pas verschillende limieten toe op basis van het gebruikersniveau (gratis versus pro). Controleer het niveau van de gebruiker voordat je bepaalt welke limiet moet worden afgedwongen.

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"

Headers teruggeven

Geef het resterende aantal verzoeken en de reset-tijd vanuit het script terug, zodat de toepassing X-RateLimit-headers in het HTTP-antwoord kan instellen.

return {allowed, limit - count, resetTime}

Gegarandeerde atomiciteit in een gedistribueerde omgeving

Omdat de volledige controle op de snelheidslimiet in één EVAL-script staat, is deze atomair voor alle instanties van toepassingsservers die hetzelfde Redis-cluster delen.

Opmerking over Redis Cluster

In de modus Redis Cluster moeten alle KEYS die in een script worden gebruikt naar hetzelfde slot worden gehasht. Gebruik hash-tags: rate:{user123}:requests om ze op dezelfde locatie te houden.

Snelheidslimieten monitoren

Registreer afgewezen verzoeken met gebruikers- en IP-informatie. Stel waarschuwingen in wanneer afwijzingspercentages sterk stijgen (dat wijst op een aanval of verkeerde configuratie).

Vraag over snelheidsbeperking

Waarom is een Redis-Lua-script beter voor snelheidsbeperking dan tellers aan de toepassingskant?

Samenvatting: snelheidsbeperking met Lua

Implementeer snelheidsbeperkers in Redis Lua met INCR+EXPIRE (vast tijdvenster) of gesorteerde verzamelingen (glijdend venster). Het atomische script garandeert correctheid over gedistribueerde toepassingsservers heen. Geef de resterende quota terug voor HTTP-headers.

Gratis beginnen

Leer Lua met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
40
Lessen
159

Veelgestelde vragen

Is de les “Rate limiting met Lua” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Lua Academy, waaronder “Rate limiting met Lua”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Lua Academy bevat in totaal 4 lessen.

Wat leer ik in “Rate limiting met Lua”?

Implementeer atomair sliding-window-rate limiters in Redis Lua Je oefent met Lua Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Lua Academy te beginnen?

Ervaring vooraf is niet nodig. Lua Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Rate limiting met Lua”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Lua Academy?

Ja. Elke les over Lua Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. EVAL en de Redis Lua-omgeving
  2. Atomaire bewerkingen en transacties
  3. Rate limiting met Lua
  4. SCRIPT LOAD en EVALSHA
← Terug naar Lua Academy