Lua Academy · Lektion

Delade minneslexikon

Cacha data mellan workers med ngx.shared.DICT för uppslag med låg latens.

Lektion 4 av 413 steg

Delade minneslexikon är en gratis lektion i Lua Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Lua Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad är ngx.shared.DICT?

ngx.shared.DICT är en delad minneszon som är åtkomlig för alla Nginx-workerprocesser. Den tillhandahåller O(1)-operationer för get/set/incr för cachning och samordning.

Deklarera delat minne i nginx.conf

Allokera delade ordlistor med ett namn och en storlek i http-blocket.

# nginx.conf
http {
  lua_shared_dict rate_limit 10m;
  lua_shared_dict cache      50m;
  lua_shared_dict locks      1m;
}

Grundläggande hämtning och lagring

Lagra och hämta värden med en valfri TTL (livslängd i sekunder).

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

Atomisk inkrementering

dict:incr(key, delta, init, expiry) ökar atomiskt en räknare. Initierar den till init om nyckeln inte finns.

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

Hastighetsbegränsning med delat minne

incr-mönstret implementerar en enkel hastighetsbegränsare med glidande fönster – ett av de vanligaste OpenResty-mönstren.

Ta bort och töm

dict:delete(key) tar bort en enskild nyckel. dict:flush_all() markerar alla nycklar som utgångna (lat borttagning). dict:flush_expired(n) tar aktivt bort utgångna nycklar.

Atomiskt tillägg

dict:add(key, val, expiry) anger en nyckel endast om den inte redan finns – användbart för distribuerad låsning.

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

Planera storleken på delat minne

Varje nyckel-värdepar har overhead (~100 byte). Uppskattning: size_mb * 1024^2 / avg_entry_size = max entries. Övervaka med dict:capacity() och dict:free_space().

Minnesutträngning

När ordlistan är full kastar OpenResty ut de äldsta posterna för att skapa plats. Ange lämpliga TTL-värden för att styra utträngningen.

Samordning mellan workerprocesser

Eftersom alla workerprocesser delar samma ordbok kan :add användas för ledarval och :incr för globala räknare i alla workerprocesser.

Begränsningar

Delade ordböcker stöder endast skalära värden (sträng, tal, booleskt värde). Lagra tabeller genom att serialisera dem till JSON med cjson.

Fråga om delat minne

Vad gör dict:incr(key, 1, 0, 60)?

Sammanfattning: Ordböcker i delat minne

ngx.shared.DICT tillhandahåller atomisk get/set/incr med O(1)-komplexitet i alla workerprocesser. Använd dem för hastighetsbegränsning, cachning och distribuerad låsning. Ange TTL-värden för att styra utträngningen. Serialisera tabeller till JSON för komplexa värden.

Gratis att börja

Lär dig Lua med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
40
Lektioner
159

Vanliga frågor

Är lektionen ”Delade minneslexikon” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Lua Academy, inklusive ”Delade minneslexikon”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Lua Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Delade minneslexikon”?

Cacha data mellan workers med ngx.shared.DICT för uppslag med låg latens. Ni övar på Lua Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Lua Academy?

Du behöver inga förkunskaper. Utbildningen i Lua Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.

Hur lång tid tar lektionen ”Delade minneslexikon”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Lua Academy-lektionen?

Ja. Varje Lua Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. OpenResty:s arkitektur
  2. Hantera HTTP-begäranden i Lua
  3. Cosockets och icke-blockerande TCP
  4. Delade minneslexikon
← Tillbaka till Lua Academy