Ideas:
1 Registro del número de visitas por minuto de una dirección IP
Registre la cantidad de llamadas a una IP en redis con IP + minuto actual como clave, y el tiempo de caducidad de la caché es 60.
2 Restringir llamadas
Si el valor de [1] excede el umbral, escriba un par clave-valor con ip + limited como clave en redis, y el tiempo de caducidad de la caché es el tiempo en que esta IP no puede llamar a la API, como 100 segundos.
Cuando se llama a la API, se juzga si el par clave-valor de ip + limited existe en redis y, de ser así, se devuelve el código de error de frecuencia limitada.
Código falso:
bool isLimted(String ip) {
// 用来判断是否IP 受限的KEY
String attackRejectKey = "attackReject:" + ip;
// 判断 redis 是否存在 attackRejectKey
if redis.get(attackRejectKey)
return true
// 用来记录IP 一分钟内访问次数的KEY
int minute = 获取当前时间的分钟字段
String requestCountKey = "requestCount:" + ip + ":" + minutes;
// 判断 redis 是否存在 requestCountKey
Count = redis.get(requestCountKey)
Count++
if Count > 阈值
redis.set(attackRejectKey, 缓存一段时间)
return false
else
redis.set(requestCountKey, Count)
return true
}