Aerospike предлагает блокировку на уровне строки.
(1) Можно ли использовать эту функцию для реализации мьютекса/блокировки операции с несколькими записями?
(2) Рекомендуется?
Пример реализации
— Две определяемые пользователем функции: одна для получения блокировки, другая для ее освобождения
– Приложение должно получить блокировку перед началом "операции"
– Запись блокировки может иметь TTL в случае, если приложение не удается снять блокировку по истечении определенного времени.
— Напишите для политики выполнения определяемой пользователем функции значение "ВСЕ"
-- return true if lock acquisition successful; else return false
function acquireLock(record, lockBin)
if not aerospike:exists(record) then
aerospike:create(record)
end
if record[lockBin] == 1 then
return false
end
record[lockBin] = 1
aerospike:update(record)
return true
end
-- return true if lock release successful, else return false
function releaseLock(record, lockBin)
if not aerospike:exists(record) then
return false
end
if not record[lockBin] == 1 then
return false
end
record[lockBin] = 0
aerospike:update(record)
return false
end