LoadingCache注意点

一、expireAfterWrite和refreshAfterWrite区别

1、expireAfterWrite

每次缓存失效LoadingCache都会去调用我们实现的load方法去重新加载缓存,在加载期间,所有线程对该缓存key的访问都将被block。所以如果实际加载缓存需要较长时间的话,这种方式不太适用。从代码中还可以看到,即使在CacheLoader实现了reload方法,也不会被调用,因为reload只有当设置了refreshAfterWrites时才会被调用。

2、refreshAfterWrite

需要自己实现CacheLoader的reload方法,缓存失效后重新加载就变成了异步,加载期间尝试获取缓存的线程也都不会被block,而是获取到加载之前的值。当加载完毕之后,各个线程就能取到最新值了。

注意点:只有刷新间隔时间到了你再去get(key)才会重新去执行Loading否则就算刷新间隔时间到了也不会执行loading操作。

 

二、expireAfterAccess和expireAfterWrite

1、expireAfterAccess

缓存被读/写则重新更新失效时间

2、expireAfterWrite

缓存被写则重新更新失效时间

 

 

 

 

 

你可能感兴趣的:(LoadingCache注意点)