【问题标题】:Spring Boot Hibernate Ehcache entity caching implementationSpring Boot Hibernate Ehcache 实体缓存实现
【发布时间】:2017-09-19 14:04:16
【问题描述】:

我需要在应用程序启动期间查询数据库表并将表条目(实体)存储在 ehcache 中。当对该行数据(实体)的请求出现时,需要从 cahce 获取数据,而不是去 DB。

我已经使用方法级缓存实现了它。但是当它没有用时,只要方法参数发生变化,就会对 DB 产生影响。如何避免它有实体级缓存的示例。

我正在使用 Spring Boot 1.2.4 ehcache 和 Spring Boot Data JPA。

【问题讨论】:

  • 您指的是 2-3 种难以理解的不同事物。请在代码摘录中提出您的问题

标签: hibernate spring-boot spring-data-jpa ehcache


【解决方案1】:

您可以预加载数据。手动。或者将Cache.getAll 与加载器编写器一起使用。或来自 JSR 107 的 Cache.loadAll

一个简单的方法就是

List<MyEntity> entities = entityManager.getAll();
entities.forEach(e -> cache.put(e.getId(), e));

要使用 loader-writer(参见 ehcache doc 它是

List<Long> entities = entityManager.getAllIds();
entities.forEach(id -> cache.get(id));

最后,loadAll 就是 cache.loadAll

【讨论】:

  • 如何从缓存中获取存储的实体
  • 从缓存中获取或者如何添加到缓存中?
  • 从缓存中获取实体
  • 但是你说你使用的是方法级缓存。所以它在访问方法时会命中缓存。自动通过spring缓存
  • 我已经完成了方法级缓存它的工作,但我想在应用程序启动期间将整个表存储在缓存中并在运行时获取数据。我需要示例示例。就好像我每次都使用方法级cahce我的方法参数更改它的触发查询想要避免它。
最近更新 更多