关于缓存:hibernate二级缓存?

Hibernate's second level cache?

本问题已经有最佳答案,请猛点这里访问。

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

但是,第一级缓存是什么?有什么用?第一级缓存是否与第二级缓存通信?有人可以解释在两级系统中缓存数据时会发生什么情况吗?

谢谢。


Hibernate的一级缓存位于您的Hibernate会话中。它的寿命很短,并且一级缓存与Hibernate会话一样多。通常,Web应用程序中每个用户请求一个会话。

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

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

当某人更改对象并将其刷新到DB时,该对象也会在第二个缓存中更改。用户在其一级缓存中已经具有相同的对象,并尝试对其进行更改和刷新,将因此获得异常。