Сделать все ключи истекает по умолчанию в Redis
Я использую MSETNX ( http://redis.io/commands/msetnx) в качестве системы блокировки, в которой все ключи блокируются, только если блокировок уже не существует.
Если умирает машина с блокировкой, эта блокировка будет заблокирована - это проблема.
Мой идеальный ответ: по истечении 15 секунд срок действия всех ключей истекает, поэтому даже если машина умирает, ее удерживаемые блокировки автоматически сбрасываются в течение короткого времени. Таким образом, мне не нужно вызывать expire для каждого ключа, который я установил.
Возможно ли это каким-либо образом?
2 ответа
Чтобы создать надежную блокировку с высоким уровнем доступности, проверьте этот документ: http://redis.io/topics/distlock
Алгоритм все еще находится на стадии бета-тестирования, но был подвергнут стресс-тестированию за несколько сеансов и, вероятно, в любом случае будет гораздо более надежным, чем подход с одним экземпляром.
Есть справочные реализации для нескольких языков (ссылки в документе).
Redis не имеет встроенного способа сделать MSETNX и атомарно истечь все ключи вместе. Также вы не можете установить пробоотборник по умолчанию для ключей.
Вместо этого вы могли бы рассмотреть: 1. Использование блока WATCH/MULTI/EXEC, который оборачивает несколько "SET key value EX 15 NX", или 2. Выполнение этого с использованием сценария на стороне сервера Lua.