这就是我正在做的事情
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
答案 0 :(得分:4)
Guava的Cache
不会复制放入其中的对象。如果您正在修改从缓存中获取的对象,则需要为每个人修改 (并且不需要为此更新缓存,因为它引用了相同的实例)。
最好缓存不可变的对象,或者至少正确支持并发修改(这通常不意味着它的访问者只是synchronized
,所以说起来容易做起来难。)