我想知道Hibernate二级缓存(我们正在使用EHCache)是否有可能允许应用程序缓存已经配置到数据库的实体,如果它知道没有其他应用程序正在修改数据库。< / p>
我的想法是,如果我更新记录A,那么我知道记录A的值并且应该能够缓存它,像Terracotta这样的JVM集群系统使用Java同步锁来支持JVM堆内存方面的这种行为。
答案 0 :(得分:2)
最先进的POJO在行动书中谈到它
如果单服务器应用程序使用持久性框架更新数据库,则框架会更新进程级缓存。
和...
可更新的缓存对象通常应使用乐观锁定,因为这会阻止应用程序盲目地覆盖数据库中的更改。如果事务更新了数据库中已更改的缓存对象,则乐观锁定失败将导致事务回滚。持久性框架将从缓存中删除陈旧数据,应用程序可以使用最新版本的数据重试事务。
根据JPA with Hibernate book
选择以下策略之一添加到原始anwser:无论是否使用@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE),Hibernate都不保证缓存和数据库之间的一致性。如果你想使用它,那么你应该配置足够短的到期超时,这可能会影响性能。
的问候,