Плановые задания
Один и тот же 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, поэтому вы можете подключить к нему существующий клиент и выполнить те же команды.