乐观锁定在grails上的redis

时间:2013-12-03 14:21:31

标签: grails concurrency transactions redis

所以我想要实现的是当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

谢谢, 伊万

0 个答案:

没有答案