spring-boot - 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 Cache)。
本质上,您必须实现一个自定义的CacheManager
和Cache
,构成Spring 的 Cache Abstraction基础的 2 个主要接口,如此处所述。它甚至可以扩展或委托给现有的缓存提供程序,但您必须“装饰”现有的功能。
我上面提到的链接也包含示例。
希望这有助于您了解如何处理您的特定 UC。
推荐阅读
- python - 数组如何成为python中的索引?
- bash - 如何替换 bash/sed 中的特殊字符?
- javascript - javascript中共享排序功能的问题
- gradle - 无法为 API gradle 项目创建 HTTP 临时文件
- python - Blender > 使用 Python 将节点添加到灯光
- python - 嵌套的json api响应python数据框
- r - 始终在被 checkboxInput() 禁用时从 selectInput() 中选择特定项目
- flutter - DataTable 中的 Dismissible 或 Swipe Action DataRow
- flutter - 当用户在 Flutter 中选择日期时如何获取日期列表
- python - python 如何让多个命令同时运行?