V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
timepast
V2EX  ›  Java

关于memcache中'乐观锁'的问题

  •  
  •   timepast ·
    idyllim · 2013-08-09 15:22:12 +08:00 · 5509 次点击
    这是一个创建于 4127 天前的主题,其中的信息可能已经有所发展或是发生改变。
    memcache中在1.2.4版本以后 有了gets 和cas 通过类似乐观锁的方法解决并发问题,具体的网上资料很多.

    现在遇到此情景:

    解决了memcache原子性的问题,但是随之而来,有多条业务不能提交,目前想到的办法是递归提交,
    但是考虑到这样效率会很低.

    请大家指导下,在平时业务中使用乐观锁,机制时,业务都是怎么处理的,有什么好的思路.
    3 条回复    1970-01-01 08:00:00 +08:00
    cloudzhou
        1
    cloudzhou  
       2013-08-09 15:32:16 +08:00   ❤️ 1
    我的观点是
    1 不要在 cache 里面要求一致性,维护这个一致性代价很大,如果以严格的并发角度来看,很多实现都是非并发安全的,你要考虑在出错的情况下实现自我纠正,特别是不能导致错误持久化。
    2 哪怕是要求了一致性,像你刚才提出的“多条业务不能提交”,说明你们的竞争太激烈,乐观锁的用处就是大部分时间是“乐观的”(我99%能获取更新成功),在竞争太激烈下就是悲观了。你要考虑事务最小化,事务处理,然后立刻提交。
    GTim
        2
    GTim  
       2013-08-09 15:36:41 +08:00
    坐等高人讨论
    timepast
        3
    timepast  
    OP
       2013-08-09 15:52:07 +08:00
    @cloudzhou 茅塞顿开,之前还一直在考虑sync的效率问题
    1.memcache只提供了乐观情况下同步解决方案.
    2.在程序(非cache)实现线程同步(认为是悲观情况)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3414 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:36 · PVG 19:36 · LAX 03:36 · JFK 06:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.