在 spring 引导中使用 Ehcache 在可缓存列表中查找对象

Find Object in List Cacheable using Ehcache in spring boot



我想在我的应用程序中使用带有 spring 引导的 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;
    }

我知道这不是一个好的原因,但我找不到好的解决方案。

任何人都可以帮助我正确使用缓存并使用可缓存的用户列表找到用户。

你应该有一个方法,它将 email 作为输入,returns user 来自数据库的电子邮件。

在该方法上添加 @cacheable 以便它只会在第一次对数据库执行昂贵的查询并将结果添加到缓存中。对于对该方法的任何后续调用,它将 return缓存中的数据而不实际执行方法的主体。

@Cacheable("users")

public User getUserByEmail(String email) {

   return userRepository.findUserByEmail(email);

}

您可以创建一个新的方法如下

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

第一次调用此方法时,它将从源中获取数据并加载缓存。下次从缓存中获取。