0Pricing
Lua Academy · Pelajaran

Pembatasan Laju dengan Lua

Implementasikan pembatas laju jendela geser secara atomik dalam Redis Lua.

Pembatasan Laju dengan Lua adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Mengapa Redis untuk Pembatasan Laju?

Redis menyediakan operasi atomik, kecepatan dalam memori, dan keadaan bersama di beberapa server aplikasi — sehingga ideal untuk pembatasan laju terdistribusi.

Penghitung Jendela Waktu Tetap Sederhana

Hitung permintaan per jendela waktu menggunakan INCR dan EXPIRE.

EVAL "
local key = KEYS[1]
local limit = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local count = redis.call('INCR', key)
if count == 1 then
  redis.call('EXPIRE', key, window)
end
if count > limit then
  return 0  -- rejected
end
return 1  -- allowed
" 1 rate:user:123 100 60

Jendela Geser dengan Himpunan Terurut

Pembatas laju yang lebih akurat menggunakan himpunan terurut dengan kunci berupa stempel waktu. Hapus entri lama, tambahkan permintaan saat ini, dan hitung ukuran himpunan.

EVAL "
local key = KEYS[1]
local now = tonumber(ARGV[1])
local window = tonumber(ARGV[2])
local limit = tonumber(ARGV[3])
redis.call('ZREMRANGEBYSCORE', key, 0, now - window * 1000)
redis.call('ZADD', key, now, now .. math.random())
redis.call('EXPIRE', key, window)
local count = redis.call('ZCARD', key)
if count > limit then return 0 end
return 1
" 1 slidingRate:user:123 1706000000000 60 100

Algoritma Keranjang Token

Keranjang token memungkinkan lonjakan permintaan sekaligus mempertahankan laju rata-rata. Isi ulang token seiring waktu; setiap permintaan menghabiskan satu token.

Algoritma Keranjang Bocor

Keranjang bocor menerapkan laju konstan yang ketat. Permintaan diantrekan (di dalam keranjang) dan diproses pada laju pengurasan tetap. Limpahan ditolak.

Batas per Pengguna dan per IP

Jadikan ID pengguna, kunci API, atau alamat IP sebagai kunci pembatas laju: rate:{userId}, rate:{ip}, rate:{apiKey}.

Batas Laju Bertingkat

Terapkan batas yang berbeda berdasarkan tingkat pengguna (gratis vs. pro). Periksa tingkat pengguna sebelum memilih batas yang akan diterapkan.

EVAL "
local tier = redis.call('HGET', 'user:tier', ARGV[1])
local limit = tier == 'pro' and 10000 or 1000
-- ... rest of rate limit check
" 0 "userId123"

Mengembalikan Header

Kembalikan jumlah permintaan yang tersisa dan waktu pengaturan ulang dari skrip agar aplikasi dapat menetapkan header X-RateLimit dalam respons HTTP.

return {allowed, limit - count, resetTime}

Jaminan Atomik Terdistribusi

Karena seluruh pemeriksaan batas laju berada dalam satu skrip EVAL, operasi tersebut atomik di semua instans server aplikasi yang berbagi klaster Redis.

Catatan tentang Redis Cluster

Dalam mode Redis Cluster, semua KEYS yang digunakan dalam skrip harus dipetakan melalui hash ke slot yang sama. Gunakan tag hash: rate:{user123}:requests untuk memaksa penempatan bersama.

Memantau Batas Laju

Catat permintaan yang ditolak beserta info pengguna/IP. Siapkan peringatan saat laju penolakan melonjak (menunjukkan serangan atau kesalahan konfigurasi).

Pertanyaan tentang Pembatasan Laju

Mengapa skrip Lua Redis lebih baik untuk pembatasan laju daripada penghitung di sisi aplikasi?

Ringkasan: Pembatasan Laju dengan Lua

Terapkan pembatas laju di Lua Redis menggunakan INCR+EXPIRE (jendela tetap) atau himpunan terurut (jendela geser). Skrip atomik menjamin ketepatan di seluruh server aplikasi terdistribusi. Kembalikan kuota yang tersisa untuk header HTTP.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Pembatasan Laju dengan Lua” gratis?

Ya — teks lengkap “Pembatasan Laju dengan Lua” 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 “Pembatasan Laju dengan Lua”?

Implementasikan pembatas laju jendela geser secara atomik dalam Redis Lua. 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 3 dari 4.

Berapa lama pelajaran “Pembatasan Laju dengan Lua” 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. EVAL dan Lingkungan Lua Redis
  2. Operasi Atomik dan Transaksi
  3. Pembatasan Laju dengan Lua
  4. SCRIPT LOAD dan EVALSHA
← Kembali ke Lua Academy