Hibernate的一级缓存和二级缓存
1,什么是缓存?
2,什么是一级缓存?
一级缓存,就是session级别的缓存
同一个session里,如果查询的数据存在,则直接在内存中取出,不发出sql语句
3,什么是二级缓存?
二级缓存,就是SessionFactory级别的缓存,可以跨越session存在
打开二级缓存
1,在hibernate.cfg.xml中设定
<property name=”cache.use_second_level”>true</property>
<property name=”cache.provider_class”>org.hibernate.cache.EhCacheProvider</property>
配置ehcache.xml配置文件
DefaultCache
maxElementsInMemory 最大对象个数
Eternal 永远生存 = true 可以替换缓存对象
timeToIdleSeconds = 120 120秒后没有使用,去掉
TimeToLiveSconds = 1200 1200生存时间后,去掉,生命值
OverflowToDisk=true 内存不够用,放在硬盘上
二级缓存适合的对象
经常被访问
改动不大,不会经常被改动
数量有限
(组织机构,权限,地区)
2,是用@cache注解,需要使用二级缓存的对象(org.hibernate.annotations)
@cache(usage=CacheConcurrencyStrategy.READ_ONLY) READ_WRITE(用的比较多)
4,load默认使用二级缓存,iterate 默认使用二级缓存
List默认往二级缓存加数据,但是查询的时候不会使用二级缓存
5,如果要query用二级缓存,需要打开查询缓存
查询缓存起作用的话,必须这个查询条件一样
I,<property name=”cache.use_query_cache”>true</property>
ii.调用Query的setCacheable(true)方法指明使用二级缓存
转载于:https://blog.51cto.com/soukenan/1175456