Jaetun muistin sanakirjat
Välimuistittakaa tietoja työntekijöiden välillä ngx.shared.DICT:llä nopeita hakuja varten.
Jaetun muistin sanakirjat on ilmainen Lua Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/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.
Mikä on ngx.shared.DICT?
ngx.shared.DICT on jaetun muistin alue, joka on kaikkien Nginxin työprosessien käytettävissä. Se tarjoaa O(1)-aikaiset get-, set- ja incr-operaatiot välimuistia ja koordinointia varten.
Jaetun muistin määrittäminen nginx.conf-tiedostossa
Varaakaa jaetut sanakirjat ilmoittamalla nimi ja koko http-lohkossa.
# nginx.conf
http {
lua_shared_dict rate_limit 10m;
lua_shared_dict cache 50m;
lua_shared_dict locks 1m;
}Perushaku ja -asetus
Tallentakaa ja noutakaa arvoja käyttämällä valinnaista TTL-arvoa (säilytysaikaa sekunteina).
-- content_by_lua_block
local cache = ngx.shared.cache
cache:set("greeting", "Hello, World!", 60) -- expires in 60s
local val = cache:get("greeting")
ngx.say(val) -- Hello, World!Atominen inkrementointi
dict:incr(key, delta, init, expiry) kasvattaa laskuria atomisesti. Se alustaa laskurin arvoon init, jos avainta ei ole olemassa.
local rl = ngx.shared.rate_limit
local count = rl:incr("req:" .. ngx.var.remote_addr, 1, 0, 60)
if count > 100 then
ngx.exit(429) -- Too Many Requests
endNopeusrajoitus jaettu muistin avulla
Incr-malli toteuttaa yksinkertaisen liukuvan ikkunan nopeusrajoittimen — yhden OpenRestyn yleisimmistä malleista.
delete ja flush
dict:delete(key) poistaa yhden avaimen. dict:flush_all() merkitsee kaikki avaimet vanhentuneiksi (laiska poisto). dict:flush_expired(n) poistaa vanhentuneet avaimet aktiivisesti.
Atominen add
dict:add(key, val, expiry) asettaa avaimen vain, jos sitä ei vielä ole olemassa — tämä soveltuu hajautettujen lukkojen toteuttamiseen.
local locks = ngx.shared.locks
local ok, err = locks:add("my_lock", true, 5) -- 5s lock
if not ok then
ngx.say("Lock held, try later")
return
end
-- critical section
-- locks:delete("my_lock") -- releaseJaetun muistin koon suunnittelu
Jokaisella avain-arvo-parilla on ylimääräistä kuormaa (noin 100 tavua). Arvioikaa: size_mb * 1024^2 / avg_entry_size = max entries. Seuratkaa tilannetta funktioilla dict:capacity() ja dict:free_space().
Muistin poistokäytännöt
Kun sanakirja on täynnä, OpenResty poistaa vanhimpia merkintöjä tehdäkseen tilaa uusille. Määrittäkää sopivat TTL-arvot poistokäytännön hallitsemiseksi.
Työprosessien välinen koordinointi
Koska kaikki työprosessit käyttävät samaa sanakirjaa, käyttäkää :add-operaatiota johtajan valintaan ja :incr-operaatiota kaikille työprosesseille yhteisten laskurien toteuttamiseen.
Rajoitukset
Jaetut sanakirjat tukevat vain skalaarisia arvoja (string, number, boolean). Tallentakaa taulukot serialisoimalla ne JSON-muotoon cjson-kirjastolla.
Jaetun muistin kysymys
Mitä dict:incr(key, 1, 0, 60) tekee?
Kertaus: Jaetun muistin sanakirjat
ngx.shared.DICT tarjoaa atomiset O(1)-aikaiset get-, set- ja incr-operaatiot kaikille työprosesseille. Käyttäkää sitä nopeusrajoitukseen, välimuistiin ja hajautettuihin lukkoihin. Määrittäkää TTL-arvot poistokäytännön hallitsemiseksi. Serialisoikaa taulukot JSON-muotoon monimutkaisia arvoja 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 ”Jaetun muistin sanakirjat” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Lua Academy-oppimispolun 3 oppituntia, myös oppitunnin “Jaetun muistin sanakirjat”. 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 ”Jaetun muistin sanakirjat”?
Välimuistittakaa tietoja työntekijöiden välillä ngx.shared.DICT:llä nopeita hakuja varten. 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 4/4.
Kuinka kauan ”Jaetun muistin sanakirjat”-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
- OpenResty-arkkitehtuuri
- HTTP-pyyntöjen käsittely Luassa
- Cosocketit ja estämätön TCP
- Jaetun muistin sanakirjat