【问题标题】:Spring Boot Cache Bulk and Access IndividuallySpring Boot 缓存批量和单独访问
【发布时间】:2019-07-19 03:54:36
【问题描述】:

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

例如,我有一个 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&lt;Integer&gt; ids) 相同的缓存,如果它不存在,它将调用数据库,并将缓存存储为又是身份证?

【问题讨论】:

    标签: spring-boot spring-cache


    【解决方案1】:

    我之前回答过类似的问题,例如参见 (Spring Cache with collection of items/entities)。

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

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

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

    【讨论】:

    • 您对此设计有何看法?做这样的事情是不好的做法吗?
    • 我认为这不一定是糟糕的设计。我认为这取决于UC。您当然必须小心您运行的查询和缓存的结果,因为您可能很快就会耗尽内存,尤其是在大容量应用程序中。我有点喜欢允许一次加载一组相关实体的想法,特别是如果这些实体很可能接下来会被操作。我曾经为国家医疗保健(例如 CHIP、Medicaid 等)研究资格确定系统,加载所有申请医疗保健的“家庭”接受者的情况并不少见。 ...
    • 每个家庭成员的决定都是独一无二的,但也取决于家庭的其他成员。例如,成人/父母可能会被拒绝,而孩子可能会被批准。例如,在这种情况下,单位是成员的家庭。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-27
    • 2015-09-11
    • 2020-12-13
    • 2016-10-13
    • 2017-03-07
    • 2018-05-17
    • 2021-08-13
    相关资源
    最近更新 更多