Hibernate的二级缓存?

时间:2012-04-21 08:46:01

标签: hibernate caching

我了解到Ehcache可以用作Hibernate的二级缓存。

但是,这是什么级别的缓存?有什么用?第一级缓存是否与第二级缓存通信?有人能否准确解释在两级系统中缓存数据时会发生什么?

谢谢。

1 个答案:

答案 0 :(得分:2)

Hibernate的第一级缓存位于Hibernate会话中。它具有较短的生命周期,并且您拥有与Hibernate会话一样多的第一级缓存。通常,Web应用程序中每个用户请求一个会话。

第一级缓存包含会话中使用的所有对象,以及尚未持久保存到基础数据库的脏对象。刷新会话后,第一级缓存中的所有脏对象将通过二级缓存传播,并保存到数据库中。

只有一个二级缓存,用作数据库与会话中所有一级缓存之间的缓存。因此,当有人从数据库加载对象时,它将保存在二级缓存中。这样,当其他人加载相同的对象时,它不会来自数据库,而是来自二级缓存。对象保留在二级缓存中,直到不再需要它们为止,具体取决于您的缓存逐出策略。

当有人更改对象并将其刷新到数据库时,对象也会在第二个缓存中更改。用户已在其第一级缓存中拥有相同的对象,并尝试更改并刷新它将因此获得异常。