我有一个关于Hibernate缓存的问题。
据我所知,Hibernate缓存用于避免频繁访问数据库。因此,我们使用Hibernate缓存机制来提高性能。
如果向数据库添加了新记录,在使用缓存时,如果不访问数据库,那么新添加的记录将如何被获取?
缓存仍然会获取旧记录,对吗?有人可以解释一下这是如何工作的吗?
NONSTRICT_READ_WRITE是一种读取时缓存,因为实体在从数据库获取时存储在缓存中(而不是在持久化时)。更新实体会导致实体缓存条目失效。
READ_WRITE是一种异步写入缓存策略,因为数据库和缓存不是事务性更新。使用软锁来保证一致性。
TRANSACTIONAL是一种同步缓存策略,因为数据库和缓存都是原子更新的。
Hibernate倾向于强一致性,因此READ_WRITE和TRANSACTIONAL缓存的一致性类似于 READ_COMMITTED隔离级别。在NONSTRICT_READ_WRITE中,仍然可能会出现过期记录。
.
为了避免频繁访问数据库,我们使用Hibernate缓存机制来提高性能。如果在使用缓存时向数据库添加了新记录,如果我们不访问数据库,那么如何获取新添加的记录?
我们将访问数据库以获取新记录,因为它不会在缓存中。然后将其存储在缓存中,并准备在随后的请求中从缓存中提供服务。
缓存仍然获取旧记录,对吗?
如果您指的是当行被更新时会发生什么,那么Hibernate也会在缓存中更新行(分解的实体)或使其无效(取决于缓存并发策略和集群环境中的缓存拓扑)。
但是,如果通过另一个应用程序在数据库中更新了该行而Hibernate不知道,则您是正确的,将从缓存中提供陈旧的数据(直到陈旧条目过期或从缓存中逐出为止)。