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

2015-03-17 20:27:41 +08:00
 156007766

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

2574 次点击
所在节点    问与答
6 条回复
xupefei
2015-03-17 21:03:05 +08:00
实现一个 memcached 的操作类,所有相关操作都通过这个类的单一实例修改。
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
2015-03-17 23:36:39 +08:00
cas
ryd994
2015-03-17 23:37:54 +08:00
compare and set
caoyue
2015-03-18 15:09:43 +08:00
Memcached 有实现 CAS 的版本号机制的吧
156007766
2015-03-25 13:29:04 +08:00
@caoyue
@gfreezy
@ryd994
@xupefei
回复晚了。。感谢您们。!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/177582

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX