1

这就是我正在做的

Cache<String,MYClass> cache=CacheBuilder.newBuilder().
                maximumSize(100).
                expireAfterAccess(30, TimeUnit.MINUTES).
                build();

String id="myid";
MyClass obj=cache.getIfPresent(id);
System.out.println(obj.getMyVariable);
obj.setMyVariable("myNewString");
updateCache(id,obj);
myClass obj2=cache.getIfPresent(id);
System.out.println(obj2.getMyVariable);

缓存会更新 MyClass 对象本身吗?我想不会。如果没有,哪个是更好的方法?

void update(String id,MyClass obj){
    cache.put(id,obj);
}

或者

void update(String id,Myclass obj){
     cache.invalidate(id);
     cache.put(id,obj);
}

期望的输出:

myOldString
myNewString
4

1 回答 1

6

番石榴Cache 不会复制放入其中的对象。如果您正在修改从缓存中获取的对象,那么您正在为每个人修改它(并且没有必要为此更新缓存,因为它引用了同一个实例)。

最好缓存不可变的对象,或者至少适当地支持并发修改(这通常并不意味着它的访问器是简单synchronized的,所以说起来容易做起来难)。

于 2013-09-04T08:18:29.520 回答