日期:2014-05-16  浏览次数:20421 次

一级缓存和二级缓存和查询缓存

A)在内存中开辟一块儿空间,把硬盘上使用的东西放在内存,将来使用时直接取

<defaultCache

       maxElementsInMemory="10000"//最多放多少对象

       eternal="false"//永远生存的

       timeToIdleSeconds="120"//120s消除

       timeToLiveSeconds="1200"//生存时间

       overflowToDisk="true"// 溢出时放到硬盘

/>

二级缓存,SessionFactory级别的缓存,可以跨越session存在

I经常被访问

Ii 改动不大会经常改动

Iii 数量有限

如:用户,组织机构

启用过程:

a.在hibernate.cfg.xml中指定二级缓存策略 <property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider </property>

b.在src目录下引入ehcache.xml配置文件

c.在hbm.xml中添加<cache>元素 <cache usage="read-write"region="sampleCache1"/>

注释:@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)Load默认使用二级缓存,iterate默认使用二级缓存,重复查询缓存

List默认二级缓存加数据,但是查询的时候不使用,只放,由于每次query的结构不一样,所以不能进行重复查询

查询缓存:用于缓存相同参数值的HQL语句及结果.基于二级缓存使用.

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

a.在hibernate.cfg.xml中启用查询缓存

b.在执行query.list()之前,调用query.setCacheable(true);

c.缓存算法:

LRU、LFU、FIFO

Least recently Used最近不使用

Least frequently used