Lua Academy · leksjon

Frekvensbegrensning med Lua

Implementer atomiske frekvensbegrensere med skyvevinduer i Redis Lua.

Leksjon 3 av 413 trinn

Frekvensbegrensning med Lua er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hvorfor Redis for hastighetsbegrensning?

Redis tilbyr atomiske operasjoner, hastighet gjennom minnebasert lagring og delt tilstand på tvers av flere applikasjonsservere – noe som gjør Redis velegnet for distribuert hastighetsbegrensning.

Enkel teller for fast tidsvindu

Tell forespørsler per tidsvindu ved hjelp av INCR og 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

Glidende vindu med sorterte mengder

En mer nøyaktig hastighetsbegrenser bruker en sortert mengde med tidsstempler som nøkler. Fjern gamle oppføringer, legg til den gjeldende forespørselen, og tell antallet elementer i mengden.

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-algoritmen

En token bucket tillater korte topper samtidig som den opprettholder en gjennomsnittlig hastighet. Fyll på tokens over tid; hver forespørsel bruker ett token.

Leaky bucket-algoritmen

Leaky bucket håndhever en fast, konstant hastighet. Forespørsler legges i kø (bøtten) og behandles med en fast tømmingshastighet. Forespørsler som overskrider kapasiteten, avvises.

Grenser per bruker og IP

Bruker-ID, API-nøkkel eller IP-adresse som nøkkel for hastighetsbegrenseren: rate:{userId}, rate:{ip}, rate:{apiKey}.

Trinnvise hastighetsgrenser

Bruk ulike grenser basert på brukernivå (gratis kontra pro). Kontroller brukerens nivå før du velger hvilken grense som skal håndheves.

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"

Returnering av headere

Returner antallet gjenværende forespørsler og tidspunktet for nullstilling fra skriptet, slik at applikasjonen kan angi X-RateLimit-headere i HTTP-svaret.

return {allowed, limit - count, resetTime}

Distribuert atomisitetsgaranti

Siden hele kontrollen av hastighetsgrensen ligger i ett enkelt EVAL-skript, er den atomisk på tvers av alle applikasjonsserverinstanser som deler Redis-klyngen.

Merknad om Redis Cluster

I Redis Cluster-modus må alle KEYS som brukes i et skript, hashes til samme slot. Bruk hashtagger: rate:{user123}:requests for å tvinge frem samlokalisering.

Overvåking av hastighetsgrenser

Logg avviste forespørsler med bruker- og IP-informasjon. Konfigurer varsler når avvisningsraten øker kraftig (det kan tyde på et angrep eller feilkonfigurering).

Spørsmål om hastighetsbegrensning

Hvorfor er et Redis Lua-skript bedre for hastighetsbegrensning enn tellere på applikasjonssiden?

Oppsummering: Hastighetsbegrensning med Lua

Implementer hastighetsbegrensere i Redis Lua ved hjelp av INCR+EXPIRE (fast vindu) eller sorterte mengder (glidende vindu). Det atomiske skriptet garanterer korrekthet på tvers av distribuerte applikasjonsservere. Returner gjenværende kvote for HTTP-headere.

Gratis å komme i gang

Lær deg Lua med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
40
Leksjoner
159

Ofte stilte spørsmål

Er leksjonen «Frekvensbegrensning med Lua» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Frekvensbegrensning med Lua», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Frekvensbegrensning med Lua»?

Implementer atomiske frekvensbegrensere med skyvevinduer i Redis Lua. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Lua Academy?

Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Frekvensbegrensning med Lua»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?

Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. EVAL og Redis Lua-miljøet
  2. Atomiske operasjoner og transaksjoner
  3. Frekvensbegrensning med Lua
  4. SCRIPT LOAD og EVALSHA
← Tilbake til Lua Academy