Lua Academy · Oppitunti

Jaetun muistin sanakirjat

Välimuistittakaa tietoja työntekijöiden välillä ngx.shared.DICT:llä nopeita hakuja varten.

Oppitunti 4/413 vaihetta

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
end

Nopeusrajoitus 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")  -- release

Jaetun 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.

Aloita maksutta

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

  1. OpenResty-arkkitehtuuri
  2. HTTP-pyyntöjen käsittely Luassa
  3. Cosocketit ja estämätön TCP
  4. Jaetun muistin sanakirjat
← Takaisin: Lua Academy