4

Hibernate 中的一级缓存存储在哪里?在内存(RAM)或硬盘中?如果它存储在内存中,如果存储查询的所有行的内存较少,在这种情况下它如何管理缓存?

4

4 回答 4

3

Hibernate Session 是它的一级缓存。它是堆中的对象,所以它在 RAM 中。通常你有足够的 RAM (>256MB) 来存储查询 =)

于 2013-03-05T09:00:30.693 回答
1

它在内存中,否则它不会提供任何性能优势。

ehcache memcached hazelcast

于 2013-03-05T08:59:29.210 回答
0

一级缓存肯定在会话所在的 RAM 中,因此具有性能和易用性的优势。

如果您认为会话中加载的对象过多,您可以在会话关闭之前从一级缓存中逐出一些对象。请参阅会话接口源代码。

public interface Session extends Serializable {
    ...

    /**
     * Remove this instance from the session cache. Changes to the instance will
     * not be synchronized with the database. This operation cascades to associated
     * instances if the association is mapped with <tt>cascade="evict"</tt>.
     *
     * @param object a persistent instance
     * @throws HibernateException
     */
    public void evict(Object object) throws HibernateException;
}
于 2013-03-05T10:06:41.693 回答
0

通常缓存存储在内存中,但如果您使用集群缓存,您可以从网络访问缓存。

这里列出了 Hibernate 缓存提供程序以及它们之间的区别:Hibernate 缓存提供程序

您可以找到其他一些可能使用 NoSql 键/值引擎来处理缓存的缓存提供程序。

于 2013-03-05T09:03:40.513 回答