我有一个关于Hibernate缓存的问题。
我所理解的是Hibernate缓存是用来避免频繁访问数据库的。因此,我们使用Hibernate缓存机制来获得性能。
如果向数据库添加了一个新记录,那么在使用缓存时,如果我们不访问数据库,那么如何获取新添加的记录?
缓存仍然会获取旧记录,对吗?有人能解释一下这是怎么回事吗?
发布于 2015-06-22 12:41:06
发布于 2015-06-22 12:43:45
缓存是一个存储数据的组件,以便能够更快地处理对该数据的未来请求;缓存中存储的数据可能是早期计算的结果,也可能是存储在其他地方的数据的副本。当请求的数据可以在缓存中找到时,就会发生缓存命中的,而当无法找到请求的数据时,则会发生缓存丢失的情况。
。
为了避免频繁的数据库命中,我们采用hibernate缓存机制来获得性能。
是真的。
如果一个新的记录已经添加到数据库中,使用缓存,如果我们没有访问数据库,那么如何获取新添加的记录?
我们不会在缓存命中的情况下访问数据库,但是如果有缓存丢失,则必须从数据库中获取值。
初始化时,缓存为空。无论何时您第一次访问记录,它都不会在缓存中。如果您访问一个记录,该记录将首先在缓存中签入,因为缓存是空的,将发生缓存丢失。由于缓存丢失,记录将从数据库中获取。将从数据库获取的记录放入缓存中,以便下次访问记录缓存时发生,并且不会访问数据库。
请注意,可以在缓存中存储多少数据/记录是有限制的。在可用的有限存储空间下,缓存大多使用最近使用最少的算法从缓存中删除最近使用最少的或最古老的访问记录。因此,即使您以前可能已经访问过一条记录,但它可能已经从缓存(缓存丢失)中被逐出。数据库命中将需要再次获取该记录。是的,该记录将再次添加到数据库中。
发布于 2015-06-22 14:36:22
“如果将新记录添加到数据库中,则在使用缓存时,如果不访问数据库,如何获取新添加的记录?”
我们将访问新记录的数据库,因为它将不在缓存中。然后将其存储在缓存中,并准备在随后的请求中从缓存中服务。
“缓存仍然会获取旧记录,对吗?”
如果您的意思是更新行时会发生什么,那么Hibernate也会更新缓存中的行(反汇编实体)或使其失效(取决于集群环境中的缓存并发策略和缓存拓扑)。
但是,如果通过另一个应用程序更新数据库中的行,而Hibernate没有意识到这一点,那么您是正确的,陈旧的数据将从缓存中得到服务(直到过期的条目过期或从缓存中被逐出)。
https://stackoverflow.com/questions/30979258
复制相似问题