6.6.2. 不可更改数据的第二级对象缓存
Hibernate 自动在内存中缓存数据以提高性能。这通过内存中缓存实现,该缓存可减少数据库查找的次数,特别是很少更改的数据。
Hibernate 维护两种类型的缓存:主缓存(也称为一级缓存)是必需的。此缓存与当前会话关联,并且所有请求都必须通过它。辅助缓存也称为第二级缓存,是可选的,仅在查询了主缓存后才会使用。
通过先将数据存储到一个状态数组中,数据存储在二级缓存中。这个数组会被深度复制,并将深度副本放入缓存中。相反,可以从缓存读取。这非常适合改变(可传递数据)的数据,但对不可变数据效率较低。
从内存使用情况和处理速度来看,深度复制数据是一项代价昂贵的操作。对于大型数据集,内存和处理速度成为了性能限制因素。Hibernate 允许您指定引用而非复制的不可变数据。Hibernate 现在可以将对数据的引用存储在缓存中,而不是复制整个数据集。
这可以通过将配置设置 hibernate.cache.use_reference_entries
的值更改为 true
来完成。默认情况下,hibernate.cache.use_reference_entries
设置为 false
。
当 hibernate.cache.use_reference_entries
设置为 true
时,没有任何关联的不可变数据对象不会复制到二级缓存中,并且仅存储对其的引用。
当 hibernate.cache.use_reference_entries
设为 true
时,具有关联的不可变数据对象仍会深入复制到二级缓存中。