一、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中expireAfterWrite与refreshAfterWrite的区别,以及expireAfterAccess与expireAfterWrite的运作机制。expireAfterWrite在缓存写入时更新失效时间,而refreshAfterWrite允许异步刷新缓存,避免线程阻塞。expireAfterAccess在读写时更新失效时间,更灵活适应访问模式。
1301

被折叠的 条评论
为什么被折叠?



