所以我想要实现的是当2个客户端递增redis文档(Optimistic locking using check-and-set part中所述的相同数字)时乐观锁定的学校示例:
WATCH mykey
val = GET mykey
val = val + 1
MULTI
SET mykey $val
EXEC
所以他们使用WATCH关键词进行乐观锁定,这听起来很不错。
我也在使用Grails并查看Grails-redis plugin。还有另一个使用GORM的redis插件,但是我看不到它(最后一个版本是1.0.0,我无法在我的应用程序中安装)
在插件文档中有一些关于redis事务的讨论但是我无法想象如何用乐观锁定来编写上面的例子。
如果有人知道如何解决这个问题,我将非常感激。
编辑:所以grails-redis插件支持某种事务,但它实际上包装jedis(这是redis的java库),我没有看到他们使用的是WATCH关键字,只是MULTI不适合我。 所以我将jedis(它确实支持WATCH)导入我的grails项目并实现了它。它已经没有错误地通过但是我还没有在2个并发调用中测试它(希望它能用于:): Jedis jedis = new Jedis("localhost");
// set some initial data
jedis.set("num", 1 as String)
// optimistic locking
jedis.watch("num")
def num = jedis.get("num") as Integer
num = num + 1
BinaryTransaction t = jedis.multi();
t.set("num", num as String)
t.exec()
// print result
def num2 = jedis.get("num")
print num2
谢谢, 伊万