Red de conocimiento informático - Problemas con los teléfonos móviles - Cola de retraso usando la colección ordenada zset Redis

Cola de retraso usando la colección ordenada zset Redis

Agregue todas las tareas que deben ejecutarse en el futuro a un conjunto ordenado, establezca el tiempo de ejecución de la tarea en una fracción y luego use un proceso para encontrar si hay una tarea en el conjunto ordenado que se pueda ejecutar inmediatamente, y si es así. , agregue la tarea La elimina del conjunto ordenado y la agrega a la cola de tareas correspondiente.

-- de Redis en acción

Cree la función addFutureJob, que es responsable de agregar tareas retrasadas al trabajo conjunto ordenado.

Los elementos almacenados en una colección ordenada se pueden guardar en formato json.

La estructura interna es similar a la siguiente:

Parámetros:

$job: El nombre de la colección ordenada que almacena las tareas retrasadas, llamado job

$queue: Cuando la tarea alcanza el tiempo de ejecución, se volcará a una cola específica para su ejecución

$fun: El nombre de la función o función anónima responsable de ejecutar la tarea

$time: el tiempo específico para retrasar la ejecución de la tarea

$parameter: los parámetros a pasar

Después de ejecutar el script, será almacenado en una colección de trabajos ordenados

En otro script, la colección de trabajos se leerá y verificará para ver si hay tareas que deban ejecutarse

El flujo básico de la función getQueue() es el siguiente. :

(1) Lea el primer elemento y ordénelo por puntuación de menor a mayor. Si el elemento no existe, devuelve false

(2) Si el elemento tarea existe y su puntuación (tiempo de ejecución) es menor o igual al tiempo actual, significa que la tarea está lista para su ejecución. .

(3) Convierta json en una matriz, lea los parámetros de la cola de la tarea, agréguelo a la cola especificada y luego elimine la tarea del trabajo.

(4) Si la operación de transferencia anterior tiene éxito, registre la operación y continúe verificando la tarea ordenada configurada en un bucle.

(5) Si la operación de transferencia falla, devuelva falso

(6) Si no hay tareas posteriores para ejecutar, detenga el ciclo y devuelva false

El ciclo también puede usar la función zrangeByScore() para leer, que lee de acuerdo con el rango de puntuación para Devuelve el elemento especificado dentro de la colección.