Найти объект в кешируемом списке с помощью Ehcache при весенней загрузке - PullRequest
0 голосов
/ 02 августа 2020

Я хочу использовать кеш в своем приложении, используя ehcache с весенней загрузкой.

Итак, я хочу кэшировать список пользователей, и когда администратор хочет найти пользователя по электронной почте, например, не использовать JpaRepository, но я хочу найти в списке кэшируемых пользователей.

Чтобы кэшировать список пользователей, я пишу код ниже

    @Override
    @Cacheable(cacheNames = "users")
    public List<User> getList() {
        return userRepository.findAll();
    }

Чтобы найти пользователя по электронной почте, я использую мгновенный код, как показано ниже:

    List<User> users = getList();
    User userByEmail(String email){
        
        for(User user: users){
            if(user.getEmail().equals(email)){
                return user;
            }
        }
        return null;
    }

Я знаю, что это плохая причина, но я не нахожу хорошего решения.

Кто-нибудь, помогите мне правильно использовать кеш и найти пользователя, используя список пользователей из кэшируемого материала.

Ответы [ 2 ]

0 голосов
/ 02 августа 2020

Вы можете создать новый метод, как показано ниже.

  @Cacheable(value = "user", key = "#email")
  public User findUserByEmail(String email) {
    //Logic to retrieve the data
  }

При первом вызове этого метода он будет извлекать данные из источника и популярного кэша. В следующий раз вы получите его из Кеша.

0 голосов
/ 02 августа 2020

У вас должен быть метод, который принимает email в качестве входных данных и возвращает user с этим электронным письмом из базы данных.

Добавьте @cacheable к этому методу, чтобы он выполнял только дорогостоящий запрос к базу данных в первый раз и добавит результат в кеш. При любом последующем вызове метода он вернет данные из кеша без фактического выполнения тела метода.

@Cacheable("users")

public User getUserByEmail(String email) {

   return userRepository.findUserByEmail(email);

}
...