Redis brpoplpush

Redis brpoplpush
Redis viene con decenas de comandos incorporados para operar en diferentes estructuras de datos, como listas, hashes, conjuntos y etc. La mayoría de los comandos realizan un tipo específico de trabajo y regresan inmediatamente. Además, hay un conjunto de comandos disponibles para usar con el bloqueo habilitado. Las operaciones de bloqueo contienen la conexión al servidor Redis hasta que termina un evento externo. Lo mejor de los comandos de bloqueo es que no bloquean todo el servidor Redis, sino que solo bloquean la conexión del cliente de llamadas.

Redis tiene varios comandos de bloqueo que operan en las estructuras de datos de la lista. El comando LPOP se usa para eliminar un elemento de la cabeza de una lista determinada. Eliminará el elemento de la cabeza de la lista e inmediatamente regresó. El elemento eliminado llegará al cliente. Siempre que no hay elementos presentes en la lista, el comando regresará inmediatamente con un valor nulo. Su variante de bloqueo es el comando BLPOP que mantendrá la conexión al servidor cuando no hay elementos presentes en la lista. El comando BLPOP esperará hasta que al menos un elemento aparezca en la lista para devolver. Hay varios comandos de bloqueo disponibles para usar con listas. En esta guía, nos centraremos en el comando brpoplpush.

Comando Redis BrpoplPush

El comando brpoplpush es la variante de bloqueo del comando rpoplpush. Por lo tanto, el comando brpoplpush se comporta lo mismo que el comando rpoplpush cuando uno o más elementos están disponibles en la lista de origen. Siempre que no hay ningún elemento único en la lista, el comando BrpoplPush contiene la conexión al servidor Redis hasta que un elemento esté disponible en la lista de origen.

Sintaxis:

Brpoplpush Source_List Destination_List TIMeout

lista de fuentes: La lista que los elementos se eliminarán de
Destination_list: La lista en la que los elementos serán empujados
se acabó el tiempo: El momento de bloquear la conexión y mantenerla viva.

El comando brpoplpush eliminará un elemento de la cola de la lista de fuentes, primero. Entonces, el elemento será empujado cerca de la cabeza de otro destino_list. Siempre que la fuente esté vacía, mantendrá la conexión como se muestra en lo siguiente:

Este comando tiene una complejidad de tiempo constante y se ha desapercido de Redis versión 6.2.0. Se recomienda usar el Blmove ordenar con BIEN y IZQUIERDA argumentos. El comando brpoplpush devuelve el elemento que se está sacando desde la fuente y empujado al destino. La salida será un valor nulo si se alcanza el tiempo de espera.

Ejemplo: servidor de mensajería con colas de confiabilidad

Supongamos que un servidor de mensajería está utilizando colas de confiabilidad para almacenar decenas de trabajos de fondo para una aplicación determinada. La lista del lado del servidor se ha utilizado para almacenar las ID de cada trabajo de fondo. Varios clientes están consumiendo la lista obteniendo trabajos de fondo de la cola.

El mayor inconveniente de este proceso es: si hay una red o la falla de la aplicación del cliente, la pieza devuelta se perderá antes del procesamiento en el lado del cliente. Por lo tanto, se necesita una cola confiable separada para almacenar el elemento explotado desde la lista de origen mientras lo devuelve al cliente. Además, la lista de origen puede estar vacía cuando no hay trabajos de fondo producidos por los editores. Por lo tanto, necesitamos una forma en que la conexión del cliente se mantenga y viva hasta que un trabajo de fondo esté disponible en la lista de origen. El comando brpoplpush es el candidato ideal para lograr esto.

Hagamos una llamada al servidor Redis con el comando brpoplpush como se muestra en el siguiente. Tanto las teclas de origen como de destino no existen.

Brpoplpush BackgroundJobs_List ReliefedQueue_list 0

Hemos especificado el argumento del tiempo de espera a 0, lo que significa que la operación Brpoplpush se bloqueará para siempre hasta que lo termine manualmente. Ahora, está esperando que al menos un solo trabajo de fondo esté disponible en la lista almacenada en Key backgroundjobs_list.

A continuación, empujaremos un trabajo de fondo al backgroundjobs_list Lista como se muestra en lo siguiente. Usemos el comando lpush para presionar un solo trabajo de fondo con la identificación de "B1".

Como se esperaba, el elemento "B1" ha sido devuelto al cliente que mantuvo la conexión hasta que un elemento esté disponible en la lista de origen backgroundjobs_list. Inspeccionemos la cola de destino confiablequeue_list. Aquí, estamos usando el Lío Comando como se muestra en el siguiente:

lrange confiablequeue_list 0 10

La cola de destino contiene el elemento "B1" que se encuentra desde la lista de origen. Este comando garantiza que los elementos se almacenan en otra cola sin perderlos cuando un cliente se bloquea. El comando brpoplpush se puede usar como una lista circular cuando tanto el origen como el destino son los mismos.

Conclusión

Para resumir, Redis tiene decenas de comandos incorporados que operan en diferentes tipos de datos. La mayoría de los comandos no están bloqueados donde el comando se devolverá inmediatamente después de que termine el trabajo. Como se discutió, hay varios comandos de bloqueo incorporados disponibles para operar en los tipos de lista. El comando brpoplpush es uno de ellos. Como ya sabes, es la variante de bloqueo del comando rpoplpush. Se comporta lo mismo que el comando rpoplpush cuando al menos un solo elemento se almacena en la lista de origen. Cada vez que la lista de origen no existe, el comando BrpoplPush esperará un tiempo de espera especificado hasta que un elemento esté presente en la lista de origen. Como se indicó, ya que tiene una complejidad de tiempo constante, muy eficiente para usar con colas confiables en los servidores de mensajería.