您的位置:首页 > 其它

Hibernate——缓存

2015-11-22 11:51 363 查看
·什么是缓存:

内存中开辟的一块空间,把本来应该存储在硬盘中的东西放入该空间,以后需要时直接从该空间读取,这部分内存就叫缓存

·什么是一级缓存:

session级别的缓存

在同一个session中,每取一个新对象,则会将其放在session缓存中,等到下次再使用该对象时,则直接从session缓存中取出

缺点:多线程情况下,每个线程都是一个不同的session,若每个线程都需要访问相同的对象,则都需要先从数据库中取出该对象。效率不高

·什么是二级缓存:

总的大缓存、SessionFactory级别的缓存

引入Jar包:



在hibernate.cfg.xml中配置:

<!-- 打开二级缓存!二级缓存默认是关闭的 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 指定使用EhCache -->
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.EhCacheRegionFactory</property>
<!-- 指定需要使用二级缓存的类!或在类上注解@Cache(usage = CacheConcurrencyStrategy.READ_ONLY/READ_WIRTE) -->
<class-cache usage="read-only" class="需要使用二级缓存的类"/>


适合放在二级缓存中的对象:

经常被访问、改动不大、数量有限的对象

load、iterate默认使用二级缓存

list查询时不使用二级缓存,但是查出的结果会放入二级缓存

·什么是三级缓存(查询缓存):

只用在同样的、重复的查询中

在hibernate.cfg.xml文件中配置:

打开查询缓存:

<property name="hibernate.cache.use_query_cache">true</property>


【注意】:查询缓存依赖于二级缓存,故需要先配置二级缓存,再打开查询缓存

在Java文件中设置使用查询缓存:

session.createQuery("from User").setCacheable(true).list();


·缓存算法:

·LRU:least recently used,最近很久未被使用的(最久未被使用)

·LFU:least frequently used,最近很少被使用的(被使用次数最少的)

·FIFO:first in first out,先进先出

4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息