Red de conocimiento informático - Material del sitio web - Implementar cola de retraso basada en Redisson

Implementar cola de retraso basada en Redisson

Supongamos que tenemos un pedido u orden de trabajo, etc. Debe apagarse después de un tiempo de espera de 30 minutos. Lo primero que me viene a la mente en este momento es usar tareas programadas para juzgar por turnos, pero en este momento el tiempo de creación de cada orden no es el mismo. Cómo juzgar este tiempo es de 5 minutos. 1 minuto. Ejecutar una vez. Esto puede afectar significativamente el rendimiento. Y el error de tiempo es muy grande. Con base en las necesidades comerciales anteriores, hemos propuesto las siguientes soluciones.

Primero analizamos la cola de retraso de JDK

Basándonos en la cola de retraso, implementamos la interfaz Delayed e implementamos el método getDelay y el método compareTo.

La entidad del pedido, en orden. Varios campos se definen en base a él para simplificar.

Para simplificar, definamos el tiempo de retardo como 10 s.

Salida

2022-07-01T15:00

Hora actual: 2022-07-01T15:10:37.375

Por supuesto, el protagonista de hoy es él, y nos centramos principalmente en la cola de retraso basada en Redisson.

De hecho, la cola de retraso interna de Redisson también se implementa en base a redis. Primero integrémosla y usémosla para ver el efecto. Basado en springboot

1. Dependencias:

2. Cree redisson.yml

3. Cree la clase de configuración RedissonConfig, aquí está la configuración que acabamos de leer. creó yml en el archivo

4. Pruebe

Salida de la consola:

Hora de generación del pedido 2022-07-01T15:22:10.304

Hora de cierre del pedido 2022-07-01T15:22:20.414

Comencemos entendiendo estas dos API

Entonces, ¿por qué hay dos colas involucradas y para qué se utilizan? ?

En primer lugar, lo que realmente operamos es la cola de bloqueo RBlockingQueue, no la cola RDelayedQueue. El acoplamiento de RDelayedQueue es principalmente para proporcionar un reenvío intermedio de la cola, similar al significado de un intermediario.

Dibuja una pequeña imagen Entiende

No es difícil ver aquí que estamos consumiendo en función de la cola de destino RBlockingQueue, y RDelayedQueue coloca mensajes caducados en nuestra cola de destino

Solo Necesita obtenerlos de la cola RBlockingQueue Solo datos.

Como si esto no fuera lo suficientemente profundo, sigamos adelante.

Sabemos que Redisson se basa en redis, así que veamos qué sucede dentro

Abra el cliente redis, ejecute el comando de monitoreo y vea qué comandos ejecutó redis durante la operación del comando anterior

El comando monitor muestra qué comandos se ejecutan durante la operación de redis

El comando monitor muestra qué comandos se ejecutan durante la operación de redis

¿Qué comandos se ejecutan durante la operación de redis

? p>

La siguiente es una referencia: /p/343811173

Sabemos que Zset está ordenado en orden ascendente de puntajes, lo que significa que el que tiene el puntaje más pequeño está al frente. Con esta característica, podemos entender aproximadamente que si coloca las puntuaciones en Zset utilizando la marca de tiempo del tiempo de vencimiento, entonces las puntuaciones que están a punto de expirar estarán al frente.

Mostrar directamente en el gráfico