Paylaşılan Bellek Sözlükleri
Düşük gecikmeli aramalar için verileri çalışanlar arasında ngx.shared.DICT ile önbelleğe alın.
Paylaşılan Bellek Sözlükleri, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
ngx.shared.DICT Nedir?
ngx.shared.DICT, tüm Nginx worker süreçlerinin erişebildiği bir paylaşılan bellek alanıdır. Önbellekleme ve koordinasyon için O(1) get/set/incr işlemleri sağlar.
nginx.conf İçinde Paylaşılan Belleği Tanımlama
Paylaşılan sözlükleri http bloğunda bir ad ve boyut belirterek ayırın.
# nginx.conf
http {
lua_shared_dict rate_limit 10m;
lua_shared_dict cache 50m;
lua_shared_dict locks 1m;
}Temel Getirme ve Ayarlama
İsteğe bağlı bir TTL (saniye cinsinden yaşam süresi) ile değerleri depolayın ve geri alın.
-- 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!Atomik Artırma
dict:incr(key, delta, init, expiry) bir sayacı atomik olarak artırır. Anahtar mevcut değilse init değeriyle başlatır.
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
endPaylaşılan Bellekle Hız Sınırlama
incr deseni, basit bir kayan pencere hız sınırlayıcısı uygular; bu, en yaygın OpenResty desenlerinden biridir.
delete ve flush
dict:delete(key) tek bir anahtarı kaldırır. dict:flush_all() tüm anahtarları süresi dolmuş olarak işaretler (tembel silme). dict:flush_expired(n) süresi dolmuş anahtarları etkin biçimde kaldırır.
Atomik Ekleme
dict:add(key, val, expiry) bir anahtarı yalnızca henüz mevcut değilse ayarlar; dağıtık kilitleme için kullanışlıdır.
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") -- releasePaylaşılan Bellek Boyutunu Planlama
Her anahtar-değer çifti ek yük taşır (~100 bayt). Tahmin: size_mb * 1024^2 / avg_entry_size = maksimum giriş sayısı. dict:capacity() ve dict:free_space() ile izleyin.
Bellek Tahliyesi
Sözlük dolduğunda OpenResty yer açmak için en eski girdileri tahliye eder. Tahliye davranışını denetlemek için uygun TTL değerleri belirleyin.
Worker'lar Arası Koordinasyon
Tüm worker'lar aynı sözlüğü paylaştığından, tüm worker süreçleri arasında lider seçimi için :add, genel sayaçlar için :incr kullanın.
Sınırlamalar
Paylaşılan sözlükler yalnızca skaler değerleri (dize, sayı, boole değeri) destekler. Tabloları cjson ile JSON'a serileştirerek depolayın.
Paylaşılan Bellek Sorusu
dict:incr(key, 1, 0, 60) ne yapar?
Özet: Paylaşılan Bellek Sözlükleri
ngx.shared.DICT, tüm worker'lar arasında O(1) atomik get/set/incr işlemleri sağlar. Hız sınırlama, önbellekleme ve dağıtık kilitleme için kullanın. Tahliyeyi denetlemek üzere TTL değerleri belirleyin. Karmaşık değerler için tabloları JSON'a serileştirin.
Sıkça Sorulan Sorular
“Paylaşılan Bellek Sözlükleri” dersi ücretsiz mi?
Evet — “Paylaşılan Bellek Sözlükleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Paylaşılan Bellek Sözlükleri” dersinde ne öğreneceğim?
Düşük gecikmeli aramalar için verileri çalışanlar arasında ngx.shared.DICT ile önbelleğe alın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.
“Paylaşılan Bellek Sözlükleri” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- OpenResty Mimarisi
- Lua'da HTTP İsteklerini İşleme
- Cosocket'ler ve Engellemesiz TCP
- Paylaşılan Bellek Sözlükleri