V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
156007766
V2EX  ›  问与答

请问一下 MEMCACHED 在高并发的情况下怎么解决 用户对同一对象修改时数据丢失的情况

  •  
  •   156007766 · 2015-03-17 20:27:41 +08:00 · 2600 次点击
    这是一个创建于 3573 天前的主题,其中的信息可能已经有所发展或是发生改变。

    A=1,2
    用户1 SET(A,[1,2,3])
    用户2 SET(A,[1,2,4])
    想要的结果应该是A是1,2,3,4
    但是发现并发高了后会出现A=1,2,3或者A=1,2,3

    第 1 条附言  ·  2015-03-17 20:59:30 +08:00
    但是发现并发高了后会出现A=1,2,3或者A=1,2,3
    改为
    但是发现并发高了后会出现A=1,2,3或者A=1,2,4
    6 条回复    2015-03-25 13:29:04 +08:00
    xupefei
        1
    xupefei  
       2015-03-17 21:03:05 +08:00 via Android
    实现一个 memcached 的操作类,所有相关操作都通过这个类的单一实例修改。
    gfreezy
        2
    gfreezy  
       2015-03-17 22:02:37 +08:00
    SET 操作原本就是替换掉KEY原来的数据。
    lz的操作是

    value = GET A
    value.append(x)
    SET A value

    这样吧。这个得用原子操作。Memcache好像没有关于list的操作,如果要实现可以
    用Redis list 的append操作,它是保证原子操作的。
    ryd994
        3
    ryd994  
       2015-03-17 23:36:39 +08:00 via Android
    cas
    ryd994
        4
    ryd994  
       2015-03-17 23:37:54 +08:00 via Android
    compare and set
    caoyue
        5
    caoyue  
       2015-03-18 15:09:43 +08:00
    Memcached 有实现 CAS 的版本号机制的吧
    156007766
        6
    156007766  
    OP
       2015-03-25 13:29:04 +08:00
    @caoyue
    @gfreezy
    @ryd994
    @xupefei
    回复晚了。。感谢您们。!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1154 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:35 · PVG 02:35 · LAX 10:35 · JFK 13:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.