使用者訪問頻率控制的redis模擬實現

2021-09-02 12:22:17 字數 1464 閱讀 2812

使用者訪問頻率控制的redis模擬實現

---》場景

限制使用者 1分鐘內登入不超過10次

---》模擬實現1

* 原理: 利用 key的存活時間內進行判斷使用者登入次數。

* 模擬實現

127.0.0.1:6379> clear

127.0.0.1:6379> set user1 1

ok127.0.0.1:6379> expire user1 60

(integer) 1

127.0.0.1:6379> set user1 2

ok127.0.0.1:6379> get user1

"2"127.0.0.1:6379> set user2 1

ok127.0.0.1:6379> expire user2 60

(integer) 1

127.0.0.1:6379> set user1 3

ok127.0.0.1:6379> ttl user1

(integer) -1

127.0.0.1:6379> exists user2

(integer) 0

127.0.0.1:6379> get user2

(nil)

127.0.0.1:6379>

* 改進:建立key 和 設定存活時間放到乙個事務裡面

127.0.0.1:6379> multi

ok127.0.0.1:6379> set user3 1

queued

127.0.0.1:6379> expire user3 60

queued

127.0.0.1:6379> exec

1) ok

2) (integer) 1

127.0.0.1:6379> ttl user3

(integer) 51

127.0.0.1:6379> get user3

"1"127.0.0.1:6379>

---》模擬實現2

* 原理:乙個鍊錶存10個登入時間,通過對比時間分析此使用者登入頻率

* 模擬實現

127.0.0.1:6379> lpush userlogintime "time1"

(integer) 1

127.0.0.1:6379> llen userlogintime

(integer) 1

127.0.0.1:6379> lpush userlogintime "time2"

(integer) 2

127.0.0.1:6379> llen userlogintime

(integer) 2

127.0.0.1:6379> lindex userlogintime 0

"time2"

127.0.0.1:6379> lindex userlogintime 1

"time1"

127.0.0.1:6379>

Redis實現訪問頻率控制

現在系統中由於各種需要,經常遇到一種場景 需要限定每個ip位址每分鐘最大訪問次數類似的需求。下面是使用redis實現范文頻率限制的一種方式。場景 要限制每分鐘每個使用者最多只能訪問100個頁面。思路 1.對每個使用者使用乙個名為 rate.limiting 使用者ip 的字串型別鍵 2.每次使用者訪...

Redis應用 限制訪問頻率

如果 收到惡意攻擊,訪問頻率可能在某個時間段特別高可能,影響 效能,嚴重還能能導致往 直接崩潰 的訪問頻率限制可以解決這個問題,1 實現訪問 例如限制每個使用者在一段事件內只能訪問一定數量的次數如 一分鐘只能訪問100次,思路 key可以使用 rete.limiting ip value 使用數值,...

Django 限制使用者訪問頻率

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