Delade minneslexikon
Cacha data mellan workers med ngx.shared.DICT för uppslag med låg latens.
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
endHastighetsbegrä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") -- releasePlanera 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.
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
- OpenResty:s arkitektur
- Hantera HTTP-begäranden i Lua
- Cosockets och icke-blockerande TCP
- Delade minneslexikon