Implementación de Redis-simple de la función de cola de tareas

Primero busque el primer punto de entrada. El tipo de lista de redis tiene dos comandos LPUSH y RPOP. El comando LPUSH permite que los elementos ingresen a la cola desde la izquierda, y el comando RPOP permite que los elementos emerjan desde la derecha. De esta manera, los dos comandos se utilizan juntos para formar una forma de entrada izquierda y salida derecha, que indirectamente realiza la función de la cola. El productor agrega tareas a una clave mediante el comando LPUSH, y el consumidor elimina continuamente tareas de la clave mediante el comando RPOP.

En este momento, la pregunta es, ¿cómo saben los consumidores cuando hay una tarea? Los consumidores solo pueden leer la cola correspondiente a la clave en un bucle continuo, consumir si hay una tarea, esperar un período de tiempo si no hay ninguna tarea, y luego intentar obtener el consumo de la tarea, etc. Pero si no hay tareas en la cola durante mucho tiempo, tal ciclo es inútil y desperdicia recursos.

¿Puede bloquear sin tareas y ejecutar solo cuando hay tareas? El comando BRPOP puede hacerlo. Cuando no hay nuevas tareas en la cola de tareas, el comando BRPOP siempre se bloqueará y no se ejecutará. Por lo tanto, cambiar el comando RPOP por el comando BRPOP puede evitar bucles innecesarios Al mismo tiempo, una vez que se genera una tarea en la cola, el consumidor comenzará a sacar la tarea como si hubiera sido notificado.

Sintaxis básica de BRPOP

BLPOP LIST1 LIST2 .. LISTN TIMEOUT 

第一个是键名,第二个是超时时间,单位是秒,如果列表为空或者超过了超时时间还没获取到新元素,就返回一个nil,否则返回一个含有两个元素的列表,第一个元素是被弹出元素所属的key,第二个元素是被弹出元素的值。

超时时间为"0",表示不限制等待的时间。

Ejemplo de uso de LPUSH y BRPOP para implementar la operación de cola de mensajes

Primero abra dos instancias de redis-cli, el puerto es 6380, uno como consumidor y otro como productor, de la siguiente manera:
Inserte la descripción de la imagen aquí

A continuación, el consumidor ingresa el comando brpop y espera la generación de una nueva tarea. Se puede encontrar que no se devuelve ningún resultado, que es un estado de bloqueo, de la siguiente manera:
Inserte la descripción de la imagen aquí

Luego, el productor ingresa el comando lpush para producir una tarea e insertarla en la cola, de la siguiente manera: Se
Inserte la descripción de la imagen aquí
encontrará que el consumidor que originalmente estaba bloqueado ya no está bloqueado, y se devuelve el nombre de la clave y el valor del elemento de la nueva tarea insertada en la cola.
Inserte la descripción de la imagen aquí

De esta manera, puede comprender fácilmente cómo Redis implementa la función de cola de tareas.

Supongo que te gusta

Origin blog.csdn.net/weixin_38106322/article/details/108524051
Recomendado
Clasificación