首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate缓存和数据库一致性

Hibernate缓存和数据库一致性
EN

Stack Overflow用户
提问于 2015-06-22 11:48:43
回答 3查看 622关注 0票数 3

我有一个关于Hibernate缓存的问题。

我所理解的是Hibernate缓存是用来避免频繁访问数据库的。因此,我们使用Hibernate缓存机制来获得性能。

如果向数据库添加了一个新记录,那么在使用缓存时,如果我们不访问数据库,那么如何获取新添加的记录?

缓存仍然会获取旧记录,对吗?有人能解释一下这是怎么回事吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-06-22 12:41:06

每个缓存并发策略都有一个关联的缓存同步方法

  1. 是一个通读缓存,因为实体在从数据库中获取时(而不是在持久化时)存储在缓存中。更新实体会导致实体缓存条目失效。
  2. 是一种异步的贯穿式缓存策略,因为数据库和缓存不是通过事务方式更新的。软锁是用来保证一致性.
  3. 事务性是一种同步缓存策略,因为数据库和缓存都是原子更新的。

Hibernate支持很强的一致性,因此READ_WRITE和事务性缓存一致性都类似于提交隔离级别。在NONSTRICT_READ_WRITE中,陈旧的记录仍然可能发生。

票数 1
EN

Stack Overflow用户

发布于 2015-06-22 12:43:45

缓存是一个存储数据的组件,以便能够更快地处理对该数据的未来请求;缓存中存储的数据可能是早期计算的结果,也可能是存储在其他地方的数据的副本。当请求的数据可以在缓存中找到时,就会发生缓存命中的,而当无法找到请求的数据时,则会发生缓存丢失的情况。

为了避免频繁的数据库命中,我们采用hibernate缓存机制来获得性能。

是真的。

如果一个新的记录已经添加到数据库中,使用缓存,如果我们没有访问数据库,那么如何获取新添加的记录?

我们不会在缓存命中的情况下访问数据库,但是如果有缓存丢失,则必须从数据库中获取值。

初始化时,缓存为空。无论何时您第一次访问记录,它都不会在缓存中。如果您访问一个记录,该记录将首先在缓存中签入,因为缓存是空的,将发生缓存丢失。由于缓存丢失,记录将从数据库中获取。将从数据库获取的记录放入缓存中,以便下次访问记录缓存时发生,并且不会访问数据库。

请注意,可以在缓存中存储多少数据/记录是有限制的。在可用的有限存储空间下,缓存大多使用最近使用最少的算法从缓存中删除最近使用最少的或最古老的访问记录。因此,即使您以前可能已经访问过一条记录,但它可能已经从缓存(缓存丢失)中被逐出。数据库命中将需要再次获取该记录。是的,该记录将再次添加到数据库中。

票数 0
EN

Stack Overflow用户

发布于 2015-06-22 14:36:22

“如果将新记录添加到数据库中,则在使用缓存时,如果不访问数据库,如何获取新添加的记录?”

我们将访问新记录的数据库,因为它将不在缓存中。然后将其存储在缓存中,并准备在随后的请求中从缓存中服务。

“缓存仍然会获取旧记录,对吗?”

如果您的意思是更新行时会发生什么,那么Hibernate也会更新缓存中的行(反汇编实体)或使其失效(取决于集群环境中的缓存并发策略和缓存拓扑)。

但是,如果通过另一个应用程序更新数据库中的行,而Hibernate没有意识到这一点,那么您是正确的,陈旧的数据将从缓存中得到服务(直到过期的条目过期或从缓存中被逐出)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30979258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档