我有以下弹簧缓存配置:
spring.cache.guava.spec: expireAfterWrite=1s
然后我测试了它:
@Test
public void test_not_work() {
callCachedMethod(..);
sleep(2s);
callCachedMethod(..);
expect("real method called TWO times");
// because cache should be expired after 1s
// It DOESN'T work, real method only called once
}
@Test
public void test_works() {
callCachedMethod(..);
sleep(2s);
callCachedMethod(..);
sleep(2s);
callCachedMethod(..);
expect("real method called THREE times");
// because cache should be expired after 1s
// IT WORKS!!
}
有人可以解释一下吗?
答案 0 :(得分:0)
这是因为当超时值到期时,Guava无法确保自动驱逐值。
根据其文档here:
使用CacheBuilder构建的缓存不执行清理并逐出值 "自动"或者在价值到期后立即或任何其他东西 那种。相反,它在执行期间执行少量维护 写入操作,或者在写入时偶尔进行读取操作 罕见的。