0Pricing
Lua Academy · Pelajaran

Kamus Memori Bersama

Cache data antarpekerja dengan ngx.shared.DICT untuk pencarian berlatensi rendah.

Kamus Memori Bersama adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Apa Itu ngx.shared.DICT?

ngx.shared.DICT adalah zona memori bersama yang dapat diakses oleh semua proses pekerja Nginx. Zona ini menyediakan operasi get/set/incr O(1) untuk caching dan koordinasi.

Mendeklarasikan Memori Bersama dalam nginx.conf

Alokasikan kamus bersama dengan nama dan ukuran di dalam blok http.

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

Get dan Set Dasar

Simpan dan ambil nilai dengan TTL opsional (waktu hidup dalam detik).

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

Penambahan Atomik

dict:incr(key, delta, init, expiry) menambah nilai penghitung secara atomik. Nilai diinisialisasi ke init jika kunci tidak ada.

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

Pembatasan Laju dengan Memori Bersama

Pola incr mengimplementasikan pembatas laju berbasis jendela geser sederhana — salah satu pola OpenResty yang paling umum.

Menghapus dan Mengosongkan

dict:delete(key) menghapus satu kunci. dict:flush_all() menandai semua kunci sebagai kedaluwarsa (penghapusan malas). dict:flush_expired(n) secara aktif menghapus kunci yang kedaluwarsa.

Penambahan Atomik

dict:add(key, val, expiry) menetapkan kunci hanya jika kunci tersebut belum ada — berguna untuk penguncian terdistribusi.

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

Perencanaan Ukuran Memori Bersama

Setiap pasangan kunci-nilai memiliki beban tambahan (~100 bita). Perkiraan: size_mb * 1024^2 / avg_entry_size = jumlah entri maksimum. Pantau dengan dict:capacity() dan dict:free_space().

Pengusiran dari Memori

Saat kamus penuh, OpenResty mengusir entri terlama untuk menyediakan ruang. Tetapkan TTL yang sesuai untuk mengendalikan perilaku pengusiran.

Koordinasi Antarpekerja

Karena semua pekerja berbagi kamus yang sama, gunakan :add untuk pemilihan pemimpin dan :incr untuk penghitung global di seluruh proses pekerja.

Batasan

Kamus bersama hanya mendukung nilai skalar (string, angka, boolean). Simpan tabel dengan melakukan serialisasi ke JSON menggunakan cjson.

Pertanyaan tentang Memori Bersama

Apa yang dilakukan dict:incr(key, 1, 0, 60)?

Ringkasan: Kamus Memori Bersama

ngx.shared.DICT menyediakan get/set/incr atomik O(1) di seluruh pekerja. Gunakan untuk pembatasan laju, caching, dan penguncian terdistribusi. Tetapkan TTL untuk mengendalikan pengusiran. Serialisasikan tabel ke JSON untuk nilai yang kompleks.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kamus Memori Bersama” gratis?

Ya — teks lengkap “Kamus Memori Bersama” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kamus Memori Bersama”?

Cache data antarpekerja dengan ngx.shared.DICT untuk pencarian berlatensi rendah. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Kamus Memori Bersama” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Arsitektur OpenResty
  2. Menangani Permintaan HTTP dalam Lua
  3. Cosocket dan TCP Non-Pemblokiran
  4. Kamus Memori Bersama
← Kembali ke Lua Academy