Lua Academy · Pelajaran

Pengehadan Kadar dengan Lua

Laksanakan pengehad kadar tetingkap gelongsor secara atom dalam Redis Lua.

Pelajaran 3 daripada 413 langkah

Pengehadan Kadar dengan Lua ialah pelajaran Lua Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Lua Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Mengapa Redis untuk Pengehadan Kadar?

Redis menyediakan operasi atomik, kelajuan dalam memori dan keadaan dikongsi merentas berbilang pelayan aplikasi — menjadikannya pilihan ideal untuk pengehadan kadar teragih.

Pembilang Tetingkap Tetap Ringkas

Kira permintaan bagi setiap tetingkap masa 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

Tetingkap Gelongsor dengan Set Terisih

Pengehad kadar yang lebih tepat menggunakan set terisih yang dikunci berdasarkan cap masa. Buang entri lama, tambah permintaan semasa dan kira saiz set.

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 Baldi Token

Baldi token membenarkan lonjakan permintaan sambil mengekalkan kadar purata. Isi semula token dari semasa ke semasa; setiap permintaan menggunakan satu token.

Algoritma Baldi Bocor

Baldi bocor menguatkuasakan kadar malar yang ketat. Permintaan dimasukkan ke dalam baris gilir (baldi) dan diproses pada kadar pengaliran tetap. Limpahan ditolak.

Had Setiap Pengguna dan Setiap IP

Gunakan ID pengguna, kunci API atau alamat IP sebagai kunci pengehad kadar: rate:{userId}, rate:{ip}, rate:{apiKey}.

Had Kadar Bertingkat

Gunakan had yang berbeza berdasarkan peringkat pengguna (percuma berbanding pro). Semak peringkat pengguna sebelum memilih had yang hendak dikuatkuasakan.

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"

Memulangkan Pengepala

Pulangkan bilangan permintaan yang masih ada dan masa tetapan semula daripada skrip supaya aplikasi boleh menetapkan pengepala X-RateLimit dalam balasan HTTP.

return {allowed, limit - count, resetTime}

Jaminan Atomik Teragih

Memandangkan keseluruhan semakan had kadar berada dalam satu skrip EVAL, operasi itu adalah atomik merentas semua tika pelayan aplikasi yang berkongsi kluster Redis.

Nota Kluster Redis

Dalam mod Kluster Redis, semua KEYS yang digunakan dalam skrip mestilah dicincang ke slot yang sama. Gunakan teg cincang: rate:{user123}:requests untuk memaksa penempatan bersama.

Memantau Had Kadar

Rekodkan permintaan yang ditolak bersama maklumat pengguna/IP. Sediakan amaran apabila kadar penolakan meningkat mendadak (menandakan serangan atau salah konfigurasi).

Soalan Pengehadan Kadar

Mengapakah skrip Lua Redis lebih baik untuk mengehadkan kadar berbanding pembilang pada sisi aplikasi?

Imbas Kembali: Pengehadan Kadar dengan Lua

Laksanakan pengehad kadar dalam Lua Redis menggunakan INCR+EXPIRE (tetingkap tetap) atau set terisih (tetingkap gelongsor). Skrip atomik menjamin ketepatan merentas pelayan aplikasi teragih. Pulangkan kuota yang masih ada untuk pengepala HTTP.

Percuma untuk bermula

Pelajari Lua dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
40
Pelajaran
159

Soalan Lazim

Adakah pelajaran “Pengehadan Kadar dengan Lua” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Lua Academy, termasuk “Pengehadan Kadar dengan Lua”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “Pengehadan Kadar dengan Lua”?

Laksanakan pengehad kadar tetingkap gelongsor secara atom dalam Redis Lua. Anda berlatih Lua Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan Lua Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran Lua Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.

Berapa lamakah pelajaran “Pengehadan Kadar dengan Lua” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. EVAL dan Persekitaran Lua Redis
  2. Operasi Atom dan Transaksi
  3. Pengehadan Kadar dengan Lua
  4. SCRIPT LOAD dan EVALSHA
← Kembali ke Lua Academy