Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk melaksanakan pengehadan semasa dalam redis

Bagaimana untuk melaksanakan pengehadan semasa dalam redis

下次还敢
下次还敢asal
2024-04-20 02:39:36703semak imbas

Redis melaksanakan pengehadan semasa dan menggunakan algoritma baldi token dan algoritma tetingkap gelongsor. Algoritma baldi token mengehadkan permintaan masuk dan algoritma tetingkap gelongsor merekodkan bilangan permintaan dalam tempoh masa tertentu dan menentukan sama ada ia melebihi ambang. Redis menggunakan perintah incr/decr untuk mengendalikan baldi token dan menggunakan perintah masa dan incrby untuk merekodkan bilangan permintaan tetingkap gelongsor. Konfigurasi pengehad semasa dilaksanakan melalui perintah set dan konfigurasi Kod sampel menetapkan kapasiti dan kadar baldi token, saiz tetingkap gelongsor dan ambang, dan menyemak sama ada permintaan terhad semasa.

Bagaimana untuk melaksanakan pengehadan semasa dalam redis

Pelaksanaan pengehadan semasa Redis

Redis melaksanakan pengehadan semasa dengan menggunakan Algoritma Baldi Token dan Algoritma Tetingkap Gelongsor.

Algoritma Token Bucket

Algoritma Token Bucket merawat permintaan yang mengalir ke dalam sistem sebagai aliran air, dan Token Bucket ialah bekas yang boleh memuatkan bilangan token yang tetap. Sistem menambah token pada baldi token pada kadar tetap Apabila permintaan tiba, sistem mengambil token daripada baldi token Jika tidak ada token yang mencukupi, permintaan akan ditolak.

Algoritma Tetingkap Gelongsor

Algoritma tetingkap gelongsor membahagikan masa kepada selang saiz tetap (tetingkap) dan merekodkan bilangan permintaan dalam setiap tetingkap. Apabila permintaan baharu tiba, sistem menyemak sama ada bilangan permintaan dalam tetingkap semasa melebihi ambang Jika ya, permintaan akan ditolak.

Pelaksanaan dalam Redis

Redis menggunakan gabungan algoritma baldi token dan algoritma tetingkap gelongsor untuk mencapai pengehadan semasa.

Token Baldi

Token baldi dalam Redis menggunakan perintah incr/decr untuk beroperasi. Perintah incr menambah token pada baldi token dan perintah decr mengalih keluar token daripada baldi token. incr/decr 命令来操作。incr 命令会向令牌桶中添加令牌,而 decr 命令会从令牌桶中取走令牌。

滑动窗口

Redis 使用 time 命令来获取当前时间,并使用 incrby 命令来记录每个窗口内的请求数量。

限流配置

Redis 使用 setconfig set 命令来配置限流参数。

  • set 命令用于设置令牌桶的容量和生成速率。
  • config set
Tetingkap gelongsor

Redis menggunakan perintah time untuk mendapatkan masa semasa dan perintah incrby untuk merekodkan bilangan permintaan dalam setiap tetingkap.

🎜🎜Konfigurasi pengehad semasa🎜🎜🎜Redis menggunakan perintah set dan config set untuk mengkonfigurasi parameter pengehad semasa. 🎜
  • Arahan set digunakan untuk menetapkan kapasiti dan kadar penjanaan baldi token. 🎜 Perintah
  • config set digunakan untuk menetapkan saiz dan ambang tetingkap gelongsor. 🎜🎜🎜🎜Contoh penggunaan🎜🎜
    <code># 设置令牌桶,容量为100,生成速率为每秒10个令牌
    SET my_token_bucket 100
    CONFIG SET my_token_bucket_refill_rate 10
    
    # 设置滑动窗口,大小为10秒,阈值为每秒100个请求
    CONFIG SET my_sliding_window_size 10
    CONFIG SET my_sliding_window_threshold 100
    
    # 检查请求是否被限流
    IF INCR my_sliding_window_counter > my_sliding_window_threshold THEN
      # 请求被限流,拒绝
      DECR my_sliding_window_counter
      RETURN -1
    END IF
    
    # 请求未被限流,记录请求并执行操作
    INCR my_sliding_window_counter
    # ... 执行操作 ...</code>

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengehadan semasa dalam redis. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn