findAndModify() не подходит ибо возможна ситуация когда мы выполняем запрос и не получаем ответ или отваливаемся
ответ вы обязательно получите если все прошло гладко.
Нужно ли что-б при обрыве откатывалось значение или достаточно что-бы лок снимался?
Снятие лока при разрыве и креше можно делать по разному:
Например можно ставить лок с таймаутом при котором лок будет не активен например через минуту, этот вариант не плох с учетом того что это очень редкая ситуация (простые разрывы связи не должны влиять, они автоматом поднимаются).
Если идет первый запуск (например после ребута сервера), то можно просто снести все локи.
Можно выделить отдельный процесс который будет отвечать за key/value (может выдать 10-30Kops/sec).
Можно ещё придумать варианты с привязкой к процессу и т.п.