【问题标题】:Ehcache at class level and query not getting synced类级别的 Ehcache 和查询未同步
【发布时间】:2017-10-30 01:51:20
【问题描述】:

XMl 中 Employee 类的缓存配置

 <cache name="com.model.Employee"
            maxEntriesLocalHeap="100" overflowToDisk="false" statistics="true" />

<cache name="employees" maxEntriesLocalHeap="1000" overflowToDisk="false" timeToLiveSeconds="60" statistics="true" />

使用查询缓存来获取员工

@QueryHints({@QueryHint(name = "org.hibernate.cacheable", value = "true"), @QueryHint(name="org.hibernate.cacheRegion", value="employees")})
    List<Employee> findAll();

两个应用程序使用相同的数据库,例如 A 和 B,如果 A 应用程序删除了员工 ID 8 ,但同时应用程序 B 可能使用这个缓存的 id 8。

在当前配置下,应用程序 B 中的员工对象可能为 null。

解决此问题或改进当前配置的任何提示

【问题讨论】:

    标签: spring jpa caching ehcache


    【解决方案1】:

    这就是缓存的概念。你有两个选择:

    • 喜欢有一点陈旧的价值(并根据您支持的陈旧程度配置过期)
    • 当值过时时从缓存中逐出

    在我的记忆中,Hibernate 默认是这样做的。但这可能会有所改变。他们将从缓存中逐出与已更新表相关的所有查询。无论如何,这就是你想要的那种行为。

    但是,您说的是两个应用程序。如果我假设不共享他们的缓存,那么......他们应该。否则,您无法从其他应用程序的缓存中逐出。所以需要Ehcache缓存通信/复制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 2021-11-30
      • 2017-10-30
      • 2011-12-14
      • 2022-01-05
      相关资源
      最近更新 更多