Nopeusrajoitus Lualla
Toteuttakaa liukuvan ikkunan nopeusrajoittimet atomisesti Redis Luassa.
Nopeusrajoitus Lualla on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Lua Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Miksi Redis pyyntöjen rajoittamiseen
Redis tarjoaa atomiset operaatiot, muistissa toimivan nopeuden ja useiden sovelluspalvelinten yhteisen tilan — siksi se sopii erinomaisesti hajautettuun pyyntöjen rajoittamiseen.
Yksinkertainen kiinteän aikajakson laskuri
Laskekaa pyynnöt aikajaksoittain INCR- ja EXPIRE-komennoilla.
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 60Liukuva aikajakso järjestetyillä joukoilla
Tarkempi pyyntörajoitin käyttää aikaleiman mukaan järjestettyä joukkoa. Poistakaa vanhat merkinnät, lisätkää nykyinen pyyntö ja laskekaa joukon koko.
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 100Token bucket -algoritmi
Token bucket mahdollistaa purskeet ja säilyttää samalla keskimääräisen nopeuden. Täyttäkää tokeneita ajan kuluessa; jokainen pyyntö kuluttaa yhden tokenin.
Leaky bucket -algoritmi
Leaky bucket -algoritmi pakottaa tiukan vakionopeuden. Pyynnöt asetetaan jonoon (ämpäriin) ja käsitellään kiinteällä tyhjennysnopeudella. Ylivuotavat pyynnöt hylätään.
Käyttäjä- ja IP-kohtaiset rajoitukset
Avainnettakaa pyyntörajoitin käyttäjätunnuksen, API-avaimen tai IP-osoitteen perusteella: rate:{userId}, rate:{ip}, rate:{apiKey}.
Porrastetut pyyntörajoitukset
Soveltakaa eri rajoituksia käyttäjätason perusteella (free tai pro). Tarkistakaa käyttäjän taso ennen käytettävän rajoituksen valitsemista.
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"Otsakkeiden palauttaminen
Palauttakaa skriptistä jäljellä oleva pyyntömäärä ja nollautumisaika, jotta sovellus voi asettaa X-RateLimit-otsakkeet HTTP-vastaukseen.
return {allowed, limit - count, resetTime}Hajautettu atomisuustakuu
Koska koko pyyntörajatarkistus on yhdessä EVAL-skriptissä, se on atominen kaikissa Redis-klusteria jakavissa sovelluspalvelininstansseissa.
Redis Cluster -huomautus
Redis Cluster -tilassa kaikkien skriptissä käytettävien KEYS-avainten on hajaututtava samaan slottiin. Käyttäkää hajautustunnisteita: rate:{user123}:requests pakottaaksenne avaimet samaan sijaintiin.
Pyyntörajoitusten valvonta
Kirjatkaa hylätyt pyynnöt käyttäjä- ja IP-tietoineen. Asettakaa hälytykset, jotka aktivoituvat hylkäysmäärien kasvaessa nopeasti (mikä voi viitata hyökkäykseen tai virheelliseen määritykseen).
Pyyntöjen rajoittamista koskeva kysymys
Miksi Redis Lua -skripti on pyyntöjen rajoittamiseen parempi kuin sovelluksen puolella ylläpidettävät laskurit?
Kertaus: pyyntöjen rajoittaminen Lualla
Toteuttakaa pyyntörajoittimet Redis Lualla käyttäen INCR+EXPIRE-yhdistelmää (kiinteä aikajakso) tai järjestettyjä joukkoja (liukuva aikajakso). Atominen skripti takaa oikeellisuuden hajautetuissa sovelluspalvelimissa. Palauttakaa jäljellä oleva kiintiö HTTP-otsakkeita varten.
Opi Lua tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 40
- Oppitunnit
- 159
Usein kysytyt kysymykset
Onko oppitunti ”Nopeusrajoitus Lualla” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Nopeusrajoitus Lualla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Lua Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Nopeusrajoitus Lualla”?
Toteuttakaa liukuvan ikkunan nopeusrajoittimet atomisesti Redis Luassa. Harjoittelet Lua Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Lua Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Lua Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.
Kuinka kauan ”Nopeusrajoitus Lualla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Lua Academy-oppitunnilla?
Kyllä. Jokainen Lua Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- EVAL ja Redisin Lua-ympäristö
- Atomiset operaatiot ja transaktiot
- Nopeusrajoitus Lualla
- SCRIPT LOAD ja EVALSHA