Aerospike - 实现 "batch operation" 锁

Aerospike - Implementing a "batch operation" lock

Aerospike 提供行级锁定。
(1) 这个特性可以用来实现多记录操作吗mutex/lock?
(2)推荐?

示例实现
- 两个UDF,一个获取锁,一个释放锁
- 应用程序必须在启动前获取锁 "operation"
- 锁定记录可以有 TTL,以防应用程序在一个锁定后未能释放锁定 一定的时间。
- 将执行 UDF 的写入策略设置为 "ALL"

-- 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

总结一下其他人的几条评论:

虽然可行,但由于性能不佳,强烈建议不要使用此实现。查看 Aerospike 的比较和交换 (CAS) 功能以实现类似的功能。