休眠如何确保使用数据库中的最新数据更新二级缓存

好奇心

我已经读到,使用hibernate的二级缓存,它可以减少对数据/对象检索的数据库命中次数,从而提高应用程序性能。

但是,休眠如何确保二级缓存与数据库中的数据保持最新。

例如:

假设下面的类是实体并且持久化到数据库中。

@Entity
class User {
    Id
    private int id;
    private String str;
}

现在,如果我们启用了二级缓存,那么我了解到,如果我们打开不同的会话,则每个会话都将命中二级缓存以获取对象值。

现在,如果数据库中的数据发生更改(例如,对于ID = 1的行),则通过一些独立的过程/手动更改值,然后尝试访问该值,休眠模式将如何检测到缓存具有最新值(对于id = 1)。

通常,休眠如何确保二级缓存中的数据与db值一致。

谢谢你的帮助。

Przemek hertel

Hibernate自己管理缓存,因此当您通过休眠会话更新某些实体时,它将使与此实体相关联的缓存条目无效-因此缓存始终是新鲜的。

如果另一个进程(或什至运行同一休眠应用程序的第二个JVM)更新了数据库中的记录,则第一个JVM上的Hibernate不会意识到这一事实,并且在其缓存中陈旧的对象。

但是,您可以使用所需的任何缓存实现(缓存提供程序)。有许多生产就绪的缓存提供程序,可用于配置给定实体在缓存中存储的时间。例如,您可以将缓存配置为在30秒后使所有实体失效,依此类推。

如果使用EhCache缓存提供程序,则可以提供以下配置:

<cache name="com.my.company.Entity" 
   maxElementsInMemory="1000" 
   eternal="false" 
   timeToIdleSeconds="7200" 
   timeToLiveSeconds="7200" 
   overflowToDisk="false" 
   memoryStoreEvictionPolicy="LRU"/>

您可以在此处找到有关L2缓存的更多信息:http ://www.tutorialspoint.com/hibernate/hibernate_caching.htm

但是,有很多有用的教程。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用休眠二级缓存更新实体

来自分类Dev

当hibernate使用各种缓存模式在二级缓存和数据库之间执行同步时?

来自分类Dev

是否可以从平面文件加载数据并转储到休眠二级缓存中?

来自分类Dev

NCache作为实体框架二级缓存未与数据库同步

来自分类Dev

一对多双向关联:数据库和二级缓存的差异

来自分类Dev

如何在Spring数据jpa中为Redis提供二级缓存?

来自分类Dev

休眠:使二级缓存无效

来自分类Dev

休眠二级缓存中关联的脏读

来自分类Dev

如何在Hibernate中启用二级缓存

来自分类Dev

infinispan作为二级缓存休眠

来自分类Dev

休眠二级缓存,按属性关闭

来自分类Dev

休眠二级缓存的应用程序属性

来自分类Dev

休眠二级缓存在内部如何工作?

来自分类Dev

休眠二级缓存在内部如何工作?

来自分类Dev

休眠:是否可以将瞬态字段保存在二级缓存中?

来自分类Dev

休眠:是否可以将瞬态字段保存在二级缓存中?

来自分类Dev

何时在休眠状态下使用二级缓存

来自分类Dev

如何在RethinkDB中获取数据库的所有二级索引的列表

来自分类Dev

开普勒中的二级缓存

来自分类Dev

休眠4二级缓存休眠不与关联(EhCache)

来自分类Dev

Hibernate二级缓存示例

来自分类Dev

实体框架二级缓存

来自分类Dev

试图驱逐二级缓存

来自分类Dev

解释二级缓存

来自分类Dev

二级缓存性能

来自分类Dev

实体框架二级缓存

来自分类Dev

JHipster。二级缓存。EntityNotFoundException

来自分类Dev

如何在JUnit测试中强制二级缓存命中?

来自分类Dev

如何在Hibernate 5.2.2中启用二级缓存?