中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

redis如何限制IP訪問次數

發布時間:2020-04-17 10:37:06 來源:億速云 閱讀:529 作者:小新 欄目:關系型數據庫

有時候我們需要限制一個api或頁面訪問的頻率,例如單ip或單用戶一分鐘之內只能訪問多少次,類似這樣的需求很容易用Redis來實現。那么redis如何限制IP訪問次數呢?下面跟著小編一起來看看吧。

redis如何限制IP訪問次數

策略1:

在redis中保存一個count值(int),key為user:$ip,value為該ip訪問的次數,第一次設置key的時候,設置expires。

count加1之前,判斷是否key是否存在,不存在的話,有兩種情況:1、該ip未訪問過;2、該ip訪問過,但是key已經過期了。那么此時需要再次設置一次expires。

如果用戶訪問的時候,判斷count的值是否大于上限,如果低于上限,就處理請求,否則就拒絕處理請求。

策略2:

考慮這種情況,假設只允許用戶60秒內訪問100次,如果有一個用戶在第1秒訪問了1次,在第59秒的時候,訪問了99次,然后在第61秒的時候,訪問了100次。

如果按照策略1的情況處理,第1~60秒之間接受了100次,在第61秒接收100次請求,所以62~120這段時間內,不再處理該ip的請求。

貌似沒問題,但是,細細思考一下,第59秒到61秒之間接受了99+100=199請求,時間間隔只有3秒。那么這樣的話,最初的設計就存在問題了。

解決方案:可以使用redis的list(雙向隊列)數據結構,key就是user:$ip,也就是每一個ip設置一個雙向隊列,每次請求到達的時候,進行如下判斷:

1、如果list中的元素個數少于100個,那么就將請求到達時的時間戳Lpush到list中。

2、如果list中的元素多余100個,那么,就取出Lindex(-1)即最右邊,也就是100個請求中最早的那一個請求的時間戳,如果最早的時間戳和當前時間戳相差超過60秒,那么表示第一個請求已經過期了,就將第一個請求出隊Rpop。然后將當前時間戳入隊Lpush。

以上就是redis如何限制IP訪問次數的簡略介紹,當然詳細使用上面的不同還得要大家自己使用過才領會。如果想了解更多,歡迎關注億速云行業資訊頻道哦!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

托克托县| 镇赉县| 栾城县| 铜山县| 东安县| 千阳县| 宁城县| 淄博市| 松江区| 邮箱| 墨竹工卡县| 怀来县| 大兴区| 禄劝| 灵山县| 金坛市| 甘泉县| 桐乡市| 镇远县| 鄂托克前旗| 平安县| 兴化市| 金堂县| 吉木萨尔县| 新田县| 弥渡县| 刚察县| 金秀| 收藏| 西乌珠穆沁旗| 丽江市| 独山县| 翁源县| 衡阳县| 扶沟县| 徐闻县| 朝阳市| 山西省| 大英县| 吉安市| 屏东县|