我们怎样才能确保JVM中只有一个实例在任何时候都在修改mem cache key实例,而且在写入过程中还没有发生读取?我可以使用低级存储或JSR包装。
List<Foo> foos = cache.get("foos");
foos.add(new Foo());
cache.put("foos", foos);
我们有什么方法可以防止并发写入等?
由于
答案 0 :(得分:1)
Fh的。几乎是在正确的方式,但不完全。他是对的,说MemCache是原子地工作的,但这并不能帮你节省“同步”。由于我们有许多JVM运行的实例,因此在考虑多线程环境时,我们无法谈论我们通常理解的实际同步。以下是跨一个或多个实例“同步”MemCache访问的解决方案:
使用方法MemcacheService.getIdentifiable(Object key)
,您将获得一个Identifiable
对象实例。您可以稍后使用MemcacheService.putIfUntouched(...)
检查MemCache API : getIdentifiable()处的API。
Identifiable
对象是一个包装器,包含通过它的Key获取的Object。
以下是它的工作原理:
putIfUntouched(...)
存储对象的第一个实例将成功,putIfUntouched
将返回true
。 putIfUntouched
将返回false
。答案 1 :(得分:0)
您是否担心通过读取密钥来破坏内存缓存,而并行操作是否写入相同的密钥?不要担心,在memcache服务器上,两个操作都将以原子方式运行。
Memcache永远不会输出'腐败'结果,写作时也不会出现腐败问题。