Redis應用 限制訪問頻率

2021-09-22 01:46:13 字數 979 閱讀 5216

如果**收到惡意攻擊,**訪問頻率可能在某個時間段特別高可能,影響**效能,嚴重還能能導致往**直接崩潰;**的訪問頻率限制可以解決這個問題,

1:實現訪問: 例如限制每個使用者在一段事件內只能訪問一定數量的次數如;一分鐘只能訪問100次,思路:key可以使用 "rete.limiting:ip",value 使用數值,使用者每次訪問將通過incr命令自增1,如果自增後的值是1同時設定過期時間為1分鐘,這樣使用者每次訪問的時候都讀取該鍵值,如果超過了100次,就表名訪問超過了限制,需要提醒使用者稍後訪問,且該鍵值每分鐘會自動刪除,所以下一分鐘有會重新計算,這樣就達到了范文頻率的目的。

string key="rege.limiting:"+ip;

//判斷key是否存在

int flag=exits(key);//key rate.limiting:192.162.177.128

if(flag==1)

}else

實現方式二:

實現一些問題的時候還是有問題的,例如使用者第一分鐘的訪問了99次,前面1秒訪問了90次,然後使用者後一秒訪問而來99 次,然後下一分鐘的第一秒有訪問了90次,再後面的59秒訪問了9次,這樣上面的演算法就是會有漏洞的:

解決方法:將上面案例中的100次調整為10次便於在次場景中描述,要精確的保證同一使用者每分鐘最多訪問10次,需要將使用者訪問的事件記錄下來,因此對每個使用者我們使用list列表型別的鍵來記錄他最近10次的訪問時間,一旦鍵中元素超過了10個,就判斷最早元素距離現在元素是否超過1分鐘,如果表示使用者最近1分鐘訪問次數超過了10次,就提醒稍後訪問,如果不是就將現在的時間加入到佇列中,同時將最早的元素刪除。

**:

string key = "rate.limiting:"+ip;

int listlength = llen(key);

if(listlength < 10)elseelse

}

日常 nginx訪問頻率限制

去年的事,隨便記記 2017年3月15日 記錄 nginx限制請求頻率 server外面加上 limit req zone binary remote addr zone one 10m rate 1r s 裡面加上 limit req zone one burst 5 解釋 超過頻率的請求會被放到...

Django 限制使用者訪問頻率

import time from django.utils.deprecation import middlewaremixin max request per second 2 每秒訪問次數 class requestblockingmiddleware middlewaremixin def p...

日常 nginx訪問頻率限制

去年的事,隨便記記 2017年3月15日 記錄 nginx限制請求頻率 server外面加上 limit req zone binary remote addr zone one 10m rate 1r s 裡面加上 limit req zone one burst 5 解釋 超過頻率的請求會被放到...