Заплановані завдання
Той самий cron запускається на кожному екземплярі, а блокування гарантує, що роботу виконує рівно один із них.
Переконайтеся, що завдання виконує лише один воркер за раз, з блокуваннями, що спливають самі та безпечно знімаються власником.
NX бере його, лише якщо ніхто не тримає. PX 30000 робить так, що воно спливає за 30 секунд, якщо A помре.
Анімований покроковий розбір з реальними командами HotKV і прикладами відповідей. Натисніть будь-який крок, щоб перейти до нього. Команди та відповіді залишаються англійською, так само, як ви вводите й бачите їх у HotKV.
Cron-завдання на кількох машинах, списання платежів і перебудови кешу не повинні виконуватися двічі одночасно. Блокування без терміну дії тримається вічно, якщо його власник упав, а зняття блокування звичайним DEL може видалити чуже блокування після спливання вашого.
SET з NX і PX отримує блокування, лише якщо його ніхто не тримає, і дає йому термін дії, щоб власник, що впав, не тримав його вічно. Кожен власник зберігає випадковий токен як значення. DELEX з IFEQ видаляє блокування, лише якщо воно досі містить ваш токен, і це безпечне зняття, яке раніше потребувало скрипта Lua.
NX бере його, лише якщо ніхто не тримає. PX 30000 робить так, що воно спливає за 30 секунд, якщо A помре.
SET lock:billing-run tok-a81f NX PX 30000Блокування утримується, тож B отримує nil і пропускає цей запуск.
SET lock:billing-run tok-b22c NX PX 30000Завдання виставлення рахунків виконує лише один воркер.
PTTL lock:billing-runDELEX видаляє ключ, лише якщо значення досі є токеном A.
DELEX lock:billing-run IFEQ tok-a81fЯкби A був надто повільним, а B уже тримав блокування, зняття від A не зачепило б блокування B.
DELEX lock:billing-run IFEQ tok-staleТой самий cron запускається на кожному екземплярі, а блокування гарантує, що роботу виконує рівно один із них.
Операції списання й повернення для одного замовлення серіалізуються, щоб ніколи не перетиналися.
Лише один запит перебудовує дорогий запис кешу, а інші чекають або віддають застаріле значення.
SET NX PX бере блокування, лише якщо воно вільне, із тайм-аутом.
SETNXPXDELEX IFEQ видаляє лише якщо значення збігається з вашим токеном.
DELEXПеревірте час, що залишився, і продовжте його для довгих завдань.
PTTLPEXPIREДля великих значень DELEX IFDEQ порівнює дайджест, а не повне значення.
DIGESTIFDEQЯкщо ваше блокування спливло й інший воркер його взяв, звичайний DEL видалив би його блокування. DELEX IFEQ видаляє його лише доки воно містить ваш токен.
Довшим, ніж зазвичай триває завдання. Для довгих завдань періодично продовжуйте термін дії, поки ви ще тримаєте блокування.
Ні. DELEX виконує порівняння та видалення однією командою.
HotKV розмовляє протоколом Redis, тож ви можете направити на нього наявний клієнт і виконувати ті самі команди.