0Pricing
Lua Academy · Lektion

Ratenbegrenzung mit Lua

Implementieren Sie atomare Rate Limiter mit gleitendem Zeitfenster in Redis Lua

Ratenbegrenzung mit Lua ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum Redis für Rate Limiting?

Redis bietet atomare Operationen, hohe Geschwindigkeit dank In-Memory-Verarbeitung und einen gemeinsamen Zustand über mehrere Anwendungsserver hinweg – dadurch eignet es sich ideal für verteiltes Rate Limiting.

Einfacher Zähler für ein festes Zeitfenster

Zählen Sie Anfragen pro Zeitfenster mit INCR und 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

Sliding Window mit sortierten Mengen

Ein genauerer Rate Limiter verwendet eine nach Zeitstempeln indizierte sortierte Menge. Entfernen Sie alte Einträge, fügen Sie die aktuelle Anfrage hinzu und zählen Sie die Elemente der Menge.

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

Token-Bucket-Algorithmus

Ein Token-Bucket ermöglicht kurzzeitige Spitzen und hält gleichzeitig eine durchschnittliche Rate ein. Füllen Sie im Laufe der Zeit Tokens nach; jede Anfrage verbraucht ein Token.

Leaky-Bucket-Algorithmus

Der Leaky Bucket erzwingt eine strikt konstante Rate. Anfragen werden in eine Warteschlange (den Bucket) gestellt und mit einer festen Ablaufrate verarbeitet. Ein Überlauf wird abgewiesen.

Limits pro Benutzer und pro IP-Adresse

Verwenden Sie die Benutzer-ID, den API-Schlüssel oder die IP-Adresse als Schlüssel für den Rate Limiter: rate:{userId}, rate:{ip}, rate:{apiKey}.

Gestaffelte Rate-Limits

Wenden Sie je nach Benutzertarif unterschiedliche Limits an (Free im Vergleich zu Pro). Prüfen Sie den Tarif des Benutzers, bevor Sie festlegen, welches Limit durchgesetzt wird.

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"

Header zurückgeben

Geben Sie die verbleibende Anzahl von Anfragen und die Rücksetzzeit aus dem Skript zurück, damit die Anwendung X-RateLimit-Header in der HTTP-Antwort setzen kann.

return {allowed, limit - count, resetTime}

Verteilte Atomaritätsgarantie

Da die gesamte Prüfung des Rate-Limits in einem einzigen EVAL-Skript erfolgt, ist sie atomar über alle Instanzen der Anwendungsserver hinweg, die den Redis-Cluster gemeinsam nutzen.

Hinweis zu Redis Cluster

Im Redis-Cluster-Modus müssen alle in einem Skript verwendeten KEYS auf denselben Slot gehasht werden. Verwenden Sie Hash-Tags: rate:{user123}:requests, um die gemeinsame Platzierung zu erzwingen.

Rate-Limits überwachen

Protokollieren Sie abgewiesene Anfragen mit Benutzer- bzw. IP-Informationen. Richten Sie Warnungen ein, wenn die Ablehnungsrate stark ansteigt (dies deutet auf einen Angriff oder eine Fehlkonfiguration hin).

Frage zu Rate Limiting

Warum eignet sich ein Redis-Lua-Skript besser für Rate Limiting als Zähler auf Anwendungsebene?

Zusammenfassung: Rate Limiting mit Lua

Implementieren Sie Rate Limiter in Redis Lua mit INCR+EXPIRE (festes Zeitfenster) oder sortierten Mengen (Sliding Window). Das atomare Skript garantiert die Korrektheit über verteilte Anwendungsserver hinweg. Geben Sie das verbleibende Kontingent für HTTP-Header zurück.

Häufig gestellte Fragen

Ist die Lektion „Ratenbegrenzung mit Lua“ kostenlos?

Ja — der vollständige Text von „Ratenbegrenzung mit Lua“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Ratenbegrenzung mit Lua“?

Implementieren Sie atomare Rate Limiter mit gleitendem Zeitfenster in Redis Lua Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Lua Academy zu starten?

Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Ratenbegrenzung mit Lua“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?

Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. EVAL und die Redis-Lua-Umgebung
  2. Atomare Operationen und Transaktionen
  3. Ratenbegrenzung mit Lua
  4. SCRIPT LOAD und EVALSHA
← Zurück zu Lua Academy