Limite la cantidad de llamadas a API a través de REDIS

Cuando se proporcionan interfaces de API de forma externa, a menudo es necesario restringir las interfaces de API. En algunos casos, también es necesario evitar que la interfaz se cepille. Esta función se puede realizar fácilmente utilizando la función de conteo de aumento automático de redis.

No diré más sobre la integración de redis en Spring boot y otros proyectos. Aquí hay un escenario para el uso de redis: verifique la cantidad de veces que se llama al método correspondiente de la API en un período de tiempo específico, si excede el límite, devuelve verdadero, activa la regla y regresa en otros casos falso.

El proyecto se basa en springboot, primero defina la configuración de umbral correspondiente:

close:
  # 封号时间区间,默认1,单位秒
  seconds: 1
  # api调用次数,默认3次,达到3次则封号。
  times: 3

Definida por 1 segundo y llamada 3 veces, la regla se activa.

El archivo de configuración se inyecta en la clase correspondiente:

@Value("${close.seconds}")
private int closeSeconds;
@Value("${close.times}")
private int closeTimes;

Luego inyecte redisTemplate y defina el prefijo clave de redis.

public static final String CLOSE_LIMIT_PRE = "close_limit_pre_";
@Resource
private RedisTemplate<String, Object> redisTemplate;

El siguiente es el método de verificación de la herramienta principal:

/**
   * 统计单位时间内,请求次数
   *
   * @param userId 用户ID
   * @param method 方法
   * @return
   */
  protected boolean isClose(Long userId, String method) {
    
    
    String key = CLOSE_LIMIT_PRE + userId + "_" + method;
    Long count = redisTemplate.opsForValue().increment(key, 1);
    if(count == 1){
    
    
      redisTemplate.expire(key, closeSeconds, TimeUnit.SECONDS);
      return false;
    } else if(count >= closeTimes){
    
    
      return true;
    } else {
    
    
      return false;
    }
  }

La clave está empalmada por la identificación del usuario y los parámetros del nombre del método. Por supuesto, puede realizar cambios de acuerdo con su escenario específico.

Inicializar por incremento o agregar al valor 1. Si el valor no existe en redis, el valor de la clave se inicializa a 1, si existe, se incrementa en 1 y se devuelve el valor. Cuando no se inicializa, la llamada devuelve un valor de recuento de 1 y el tiempo de vencimiento se establece en este momento. En otros casos, compare si el número de veces excede el límite, si lo excede, devuelva verdadero y la persona que llama lo manejará.

Enlace original: " Restricción del número de llamadas a la API a través de REDIS "

Video tutorial de Fine SpringBoot 2.x

"Spring Boot 2.x Video Tutorial Family Bucket" , un video tutorial boutique de Spring Boot 2.x, para crear el conjunto más completo de videos tutoriales de Spring Boot 2.x.


Nueva visión del procedimiento

La cuenta pública " Nueva Visión del Programa ", una plataforma que le permite mejorar simultáneamente su poder blando y su tecnología dura.

Cuenta oficial de WeChat: nueva visión del programa

Supongo que te gusta

Origin blog.csdn.net/wo541075754/article/details/107148931
Recomendado
Clasificación