Преобразование существующего кеша как карты в Spring @Cacheable

В настоящее время у меня есть метод, который выполняет вставку в базу данных с помощью метода хранилища 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, но, конечно, кеш пуст, когда он вызывается.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
737
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

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

@SpringBootApplication
@EnableCaching
public class Application {

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

}

Не переборщить с сохранением всей клиентской сущности? Мне нужен только его идентификатор

Adao 30.05.2018 18:22

чем вы возвращаете только идентификатор там

pL4Gu33 30.05.2018 18:26

Другие вопросы по теме