一级缓存和二级缓存和查询缓存
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命中率低
First in first out先进先出
memoryStoreEvictionPplicy="LRU"