首页 > 解决方案 > Spring Boot 缓存批量和单独访问

问题描述

为单个实体重复访问数据库比进行批量选择要慢得多。如何将批量选择的结果缓存到缓存中,然后单独访问它?

例如,我有一个 Employee 实体:

public class Employee {
  private Integer id;
}

而且我有可以通过批量选择或单独通过 id 访问它的存储库:

public class EmployeeRepository {
  public Map<Integer, Employee> retrieveByEmployeeIds(List<Integer> ids) {
    // impl
  }
  public Employee retrieveByEmployeeId(Integer id) {
    // impl
  }
}

如何实现它,以便在retrieveByEmployeeId(Integer id)调用时检查与 相同的缓存retrieveByEmployeeIds(List<Integer> ids),如果它不存在,它将调用数据库,并再次使用 id 存储该缓存?

标签: spring-bootspring-cache

解决方案


我之前回答过类似的问题,例如参见(带有项目/实体集合的 Spring Cache)。

本质上,您必须实现一个自定义的CacheManagerCache,构成Spring 的 Cache Abstraction基础的 2 个主要接口,如此所述。它甚至可以扩展或委托给现有的缓存提供程序,但您必须“装饰”现有的功能。

我上面提到的链接也包含示例。

希望这有助于您了解如何处理您的特定 UC。


推荐阅读