我们正在扩展.NET couchbase客户端以添加一些额外的功能(类似于事务,或者更确切地说是回滚),我的雷达之一就是支持记录锁定。
我知道check-and-set会在没有CAS值的情况下阻止更新,但我正在尝试通过使用couchbase的getlock功能(可在Python客户端上使用)来防止脏读因此可能是服务器,但不是.NET客户端)
我的第一个想法是它可能由REST API提供,但在做了一些研究后,看起来API只能用于查询视图。我知道memcached有一个telnet接口,但它可能太多了,希望它在那里可用。如果它就像在服务器端调用一样简单,我想它已经存在于客户端......
可以使用lease out模式,但如果功能非常难以达到,则不希望沿着这条路走下去。
答案 0 :(得分:0)
Getl支持目前尚未在.NET客户端中实现(2013年2月20日),但计划很快添加(http://www.couchbase.com/issues/browse/NCBC-231)。还要注意的一点是,getl不会阻止其他连接读取,但只能阻止其他连接写入锁定的密钥。
此外,我不太明白为什么要尝试防止脏读,因为Couchbase不允许您从副本服务器读取。换句话说,每次读取都将始终返回Couchbase中的最新值。
*注意Couchbase确实有一个副本读取api,但是通过调用它你明确地说你可以得到一个旧项目。