Redisによるアクセス頻度の制限
951 ワード
Method 1
IP:
要求の頻度が毎秒10回,毎分9回であれば,問題のあるアクセスであっても制限できないことを考慮した.So
Method 2
IPkeyのlist長、すなわちIPアクセスのタイムキューを計算し、10回未満であれば、アクセス毎の時間をスタックに入れる.そうでなければ、アクセス回数が10回未満の場合、現在の時間と最近のアクセス時間の時間差を計算し、60秒未満の場合、アクセスを禁止します.そうでなければ、キューをリセットし、アクセス時間を再格納します.
IP:
rate.limiting:$IP
をkeyで記録し、初期時設定期間は60秒であり、タイムアウトした場合は再設定し、そうでなければ判断し、1分以内に100回以上アクセスした場合はアクセスを禁止する.$isKeyExists = rate.limiting:$IP
if ($isKeyExists == 1) {
$times = INCR rate.limiting:$IP
if ($times > 100){
print ' '
exit
}
}else{
MULTI
INCR rating.limiting:$IP
EXPIRE rating.limiting:$IP 60
EXEC
}
要求の頻度が毎秒10回,毎分9回であれば,問題のあるアクセスであっても制限できないことを考慮した.So
Method 2
$listLength = LLEN rate.limiting:$IP
if ($listLength < 10) {
LPUSH rate.limiting:$IP now()
}else{
$time = LINDEX rate.limiting:$IP, -1
if (now() - $time < 60){
print " "
exit
}else{
LPUSH rate.limiting:$IP now()
LTRIM rate.limiting:$IP, 0, 9
}
}
IPkeyのlist長、すなわちIPアクセスのタイムキューを計算し、10回未満であれば、アクセス毎の時間をスタックに入れる.そうでなければ、アクセス回数が10回未満の場合、現在の時間と最近のアクセス時間の時間差を計算し、60秒未満の場合、アクセスを禁止します.そうでなければ、キューをリセットし、アクセス時間を再格納します.