Я реализовал cache
, используя caffeine
. Я хочу, чтобы срок его действия истекал через 1 day
, и это работает нормально. Проблема в том, что если я попытаюсь получить данные из cache
, используя модифицированный запрос (измененный с точки зрения значений параметров), я всегда получаю одни и те же результаты. Я хочу получить те же результаты, только если я выполнил запрос с одинаковыми значениями параметров (например, с тем же диапазоном дат). Насколько я понимаю, мне не следует повторно использовать один и тот же cache-key
, но я не уверен, как это сделать. Это реализация:
@Service
public class SomeServiceImpl implements SomeService {
private static final String CACHE_KEY = "some-key";
private Cache<String, List<SomeVO>> someCache;
public RecentHighestSlotWinsServiceImpl() {
someCache= Caffeine.newBuilder().maximumSize(100).expireAfterWrite(1, TimeUnit.DAYS).build();
}
@Override
public List<SomeVO> checkCacheForData(Instant startDate, Instant endDate) {
List<SomeVO> someList= someCache.getIfPresent(CACHE_KEY);
if (someList!= null) {
return someList;
} else {
log.info("Loading from DB ");
List<SomeVO> templateResult= getData(startDate, endDate);
if (templateResult.isSuccessAndNotNull()) {
someCache.put(CACHE_KEY, Objects.requireNonNull(templateResult.getData()));
}
return templateResult;
}
}
Cache
с ключомString
вы должны кэшировать на основе объекта с правильно реализованным equals и hashCode, который содержитstartDate
иendDate
. - person Louis Wasserman   schedule 01.07.2020java.time
включает Интервал. Обратите внимание, что ваш собственный POJO должен будет реализоватьequals
иhashCode
. - person Ben Manes   schedule 01.07.2020