@Cacheable и refreshAfterWrite
В настоящее время я использую весеннюю загрузку кеша и кофеин с конфигом spring.cache.caffeine.spec=expireAfterWrite=2h,recordStats
как только конфиг и такой метод:
@Cacheable(
value = CacheConfig.PRODUCTS_CACHE_NAME
)
public List<ProductDetails> getProductsDetails(String language) {
// long running remote request
return products;
}
Для более гибкого поведения я хочу, чтобы кэш-память все еще обслуживала старое значение, когда удаленный сервис недоступен.
Но конфиг spring.cache.caffeine.spec=refreshAfterWrite=2h,recordStats
приводит к исключению, говорящему refreshAfterWrite requires a LoadingCache
,
Я знаю, что я мог бы реализовать CacheLoader
боб сам. Но тогда я должен был бы вызвать кеш напрямую и потерял бы прозрачное поведение @Cachable.
Я ищу следующее поведение:
Кэш MISS => загрузить значение и вернуть синхронно.
Кеш HIT => обслуживать значение из кеша.
HIT кэширования после порога обновления => синхронно обслуживать старое значение из кэша и обновлять значение в фоновом режиме.
Бонус: кэшировать HIT после того, как текущее значение старше X => загрузить значение и вернуться синхронно.
Возможно ли такое поведение?