156007766
V2EX  ›  问与答

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

  •  
  •   156007766 · Mar 17, 2015 · 3178 views
    This topic created in 4101 days ago, the information mentioned may be changed or developed.

    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

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

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

    这样吧。这个得用原子操作。Memcache好像没有关于list的操作,如果要实现可以
    用Redis list 的append操作,它是保证原子操作的。
    ryd994
        3
    ryd994  
       Mar 17, 2015 via Android
    cas
    ryd994
        4
    ryd994  
       Mar 17, 2015 via Android
    compare and set
    caoyue
        5
    caoyue  
       Mar 18, 2015
    Memcached 有实现 CAS 的版本号机制的吧
    156007766
        6
    156007766  
    OP
       Mar 25, 2015
    @caoyue
    @gfreezy
    @ryd994
    @xupefei
    回复晚了。。感谢您们。!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5486 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 59ms · UTC 08:15 · PVG 16:15 · LAX 01:15 · JFK 04:15
    ♥ Do have faith in what you're doing.