Trabajos programados
El mismo cron se ejecuta en todas las instancias, y el bloqueo garantiza que exactamente una de ellas haga el trabajo.
Asegúrate de que solo un worker ejecuta un trabajo a la vez, con bloqueos que caducan solos y que su propietario libera de forma segura.
NX lo toma solo si nadie lo tiene. PX 30000 hace que caduque en 30 segundos si A muere.
Un recorrido animado con comandos reales de HotKV y respuestas de ejemplo. Haz clic en cualquier paso para saltar a él. Los comandos y las respuestas se quedan en inglés, tal como los escribes y los ves en HotKV.
Los cron jobs en varias máquinas, las capturas de pagos y las reconstrucciones de caché no deben ejecutarse dos veces a la vez. Un bloqueo sin caducidad queda retenido para siempre cuando su propietario falla, y liberar un bloqueo con un simple DEL puede borrar el bloqueo de otro después de que el tuyo haya caducado.
SET con NX y PX adquiere un bloqueo solo si nadie lo tiene, y le da una caducidad para que un propietario caído no pueda retenerlo para siempre. Cada propietario guarda un token aleatorio como valor. DELEX con IFEQ borra el bloqueo solo si todavía contiene tu token, que es la liberación segura que antes requería un script de Lua.
NX lo toma solo si nadie lo tiene. PX 30000 hace que caduque en 30 segundos si A muere.
SET lock:billing-run tok-a81f NX PX 30000El bloqueo está tomado, así que B recibe nil y se salta esta ejecución.
SET lock:billing-run tok-b22c NX PX 30000Solo un worker ejecuta el trabajo de facturación.
PTTL lock:billing-runDELEX borra la clave solo si el valor sigue siendo el token de A.
DELEX lock:billing-run IFEQ tok-a81fSi A hubiera ido demasiado lento y B tuviera ahora el bloqueo, la liberación de A dejaría intacto el bloqueo de B.
DELEX lock:billing-run IFEQ tok-staleEl mismo cron se ejecuta en todas las instancias, y el bloqueo garantiza que exactamente una de ellas haga el trabajo.
Las operaciones de captura y reembolso de un pedido se serializan para que nunca se solapen.
Solo una solicitud reconstruye una entrada de caché costosa mientras las demás esperan o sirven el valor antiguo.
SET NX PX toma el bloqueo solo si está libre, con un tiempo de espera.
SETNXPXDELEX IFEQ borra solo si el valor coincide con tu token.
DELEXComprueba el tiempo restante y prolóngalo en trabajos largos.
PTTLPEXPIREPara valores grandes, DELEX IFDEQ compara un digest en lugar del valor completo.
DIGESTIFDEQSi tu bloqueo caducó y otro worker lo tomó, un simple DEL borraría su bloqueo. DELEX IFEQ solo lo borra mientras todavía contiene tu token.
Más de lo que tarda normalmente el trabajo. En trabajos largos, prolonga la caducidad periódicamente mientras sigas teniendo el bloqueo.
No. DELEX hace la comparación y el borrado en un solo comando.
HotKV habla el protocolo de Redis, así que puedes apuntar un cliente que ya usas hacia él y ejecutar estos mismos comandos.