要限制Redis的IP訪問次數,可以使用Redis的INCR
命令結合EXPIRE
命令和Lua腳本來實現。
首先,創建一個Lua腳本來實現IP訪問次數限制的邏輯:
local ip = KEYS[1]
local limit = tonumber(ARGV[1])
local count = tonumber(redis.call("GET", ip) or "0")
if count + 1 > limit then
return 0
else
redis.call("INCR", ip)
redis.call("EXPIRE", ip, 60) -- 設置訪問次數的過期時間為60秒
return 1
end
然后,在Redis中執行上述Lua腳本,并傳入IP地址和限制的訪問次數:
EVAL "lua腳本" 1 "IP地址" "訪問次數限制"
例如,要限制IP地址127.0.0.1
每分鐘最多訪問10次,可以執行以下命令:
EVAL "lua腳本" 1 "127.0.0.1" 10
如果返回值為1
,表示IP訪問次數未超過限制,可以繼續訪問;如果返回值為0
,表示IP訪問次數超過限制,不允許訪問。