当前位置: 首页 > 面试题库 >

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

刘瀚
2023-03-14
问题内容

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

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

例如:

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

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

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

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

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

谢谢你的帮助。


问题答案:

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

如果另一个进程(或什至运行同一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

但是,有很多有用的教程



 类似资料:
  • 我已经读到,使用hibernate的二级缓存,它可以通过减少数据/对象检索的数据库命中来提高应用程序的性能。 然而,hibernate如何确保二级缓存和数据库中的数据是最新的。 例如: 假设下面的类是entity并持久化到DB中。 现在,如果我们启用了二级缓存,我知道如果我们打开不同的会话,那么每个会话都将命中二级缓存以检索对象值。 现在,如果数据库中的数据发生更改(例如,对于id=1的行),例如

  • 问题内容: 我正在尝试使用Hibernate插入或更新大数据。我有一个包含350k对象的列表,当我使用Hibernate时,要花费数小时才能插入所有数据。 我正在使用以下代码进行此操作。我的开发环境是JDK1.4和Oracle数据库。 我正在使用批处理更新,还设置了属性50,但这并没有帮助。 我的对象与另一个对象具有一对一的关系,因此在这种情况下使用StatelessSession可能会出现问题。

  • 问题内容: 我们的Java应用程序有大约100个类映射到数据库(SQL Server或MySQL)。我们使用Hibernate作为我们的ORM(带有XML映射文件)。 我们在数据库架构中指定约束。我们的大多数约束条件也都指定了。 我们最近开始启用Hibernate 2级缓存(适用于流行的实体和集合),以缓解一些性能问题。 自从启用第二级缓存以来,性能得到了提高。但是,我们也开始遇到ObjectNo

  • 问题内容: 有人知道如何在hibernate配置中添加另一个数据源,以及如何在自己的DAO中将Spring配置为其自动注入该数据源吗? 这是我的带有一个数据源的代码,可以完美运行,但是我不知道如何添加另一个数据源。我想添加另一个数据源,该数据源是具有与实际数据库不同的表的数据库。 HIBERNATE CONF 道例 问题答案: 好。我找到了另一个解决方案,并且使用了相同的方法:添加另一个dataS

  • 我想用AJAX和Laravel5.2框架更新数据库表列。我有一个按钮,当我点击该按钮时,它会将一列从更新为。我还使用sweetAlert插件进行弹出式设计。我找了很多。但我没有找到完美的程序。我试过这样做: 路线: WinnerController: 视图中的脚本: 刀片: 刀片前端: 这是更新栏,但更新后它重定向了另一个页面,它只显示弹出它不需要提交弹出的确认按钮。有办法这么做吗?有人能回答我下

  • 问题内容: 我正在使用Spring + JPA + Hibernate。我正在尝试启用Hibernate的二级缓存。在我的春天,我有: 运行时出现错误: 所以有人抱怨我没有启用二级缓存。我试图通过添加到我的启用它: 但是仍然没有喜悦。我还尝试将其添加到ehcache.xml中: 但这仍然行不通。将更改为也无济于事: 我的实体类被注释为使用缓存 那么,如何启用二级缓存? 编辑: 这是在bean下: