Преобразование существующего кэша в виде карты в Spring @Cacheable - PullRequest
0 голосов
/ 30 мая 2018

В настоящее время у меня есть метод, который делает вставку в базу данных, используя метод хранилища Jooq.Каждый раз, когда запись сохраняется, она добавляется в локальный кеш, который в основном представляет собой карту с идентификатором, который приходит спереди (который мне нужно сохранить для последующего использования), и идентификатором, который создается при сохранении.Итак, в основном:

private Map<String, Integer> cache = new HashMap<>();
public insert(List<Customer> customers>{

     //some code to convert Customer to jooq generated CustomerRecord, 
     //which implements UpdatableRecord from Jooq

     record.store();
     cache.put(record.getFrontId(), record.getId());
}
public int find(String frontId) { return cache.get(frontId); }

В настоящее время все это работает, но управление всем этим требует больших усилий.Как использовать такое кэширование с Spring @Cacheable?Я никогда не использовал его, но я пытался добавить @CacheEvict(value="customer", key="#frontId") в метод find, но, конечно, кеш пуст, когда он вызывается.

1 Ответ

0 голосов
/ 30 мая 2018

Это пример для вас ... (Параметр автоматически является ключом кэша (вы можете указать его с помощью (key = "# search.keyword) в Cacheable):

@Cacheable(value="customercache")
public Customer find(String customerkey) {
    return //Load some customer; 
 }
  1. Кэш ищет, может ли он найти ключ клиента в своем реализованном кэше, если он имеет ключ, он возвращает клиента, и тело метода не вызывается.
  2. Если в кеше не найдено ни одной ключевой записи, он вызывает тело и возвращает клиента, теперь он тоже сохраняется в кеше.

Действительно импортировать,Не забудьте активировать кеширование в основном методе.

@SpringBootApplication
@EnableCaching
public class Application {

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}

}
...