要限制Redis的IP訪問次數(shù),可以使用Redis的INCR
命令結(jié)合EXPIRE
命令和Lua腳本來實現(xiàn)。
首先,創(chuàng)建一個Lua腳本來實現(xiàn)IP訪問次數(shù)限制的邏輯:
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) -- 設(shè)置訪問次數(shù)的過期時間為60秒
return 1
end
然后,在Redis中執(zhí)行上述Lua腳本,并傳入IP地址和限制的訪問次數(shù):
EVAL "lua腳本" 1 "IP地址" "訪問次數(shù)限制"
例如,要限制IP地址127.0.0.1
每分鐘最多訪問10次,可以執(zhí)行以下命令:
EVAL "lua腳本" 1 "127.0.0.1" 10
如果返回值為1
,表示IP訪問次數(shù)未超過限制,可以繼續(xù)訪問;如果返回值為0
,表示IP訪問次數(shù)超過限制,不允許訪問。