91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

鸡泽县| 田阳县| 嘉义县| 穆棱市| 分宜县| 洪湖市| 阜新市| 龙陵县| 灌南县| 峨山| 遂平县| 苍南县| 富宁县| 谷城县| 三都| 平阴县| 贵德县| 油尖旺区| 文成县| 平江县| 梓潼县| 犍为县| 孟村| 子长县| 金川县| 博乐市| 黑河市| 大化| 曲松县| 恩平市| 厦门市| 阿拉善右旗| 四子王旗| 垣曲县| 阳山县| 岳西县| 麦盖提县| 锦屏县| 石家庄市| 房山区| 嵊州市|