hibernate 二级缓存 SessionFactory级共享
实现为可插拔,通过修改cache.provider_class参数来改变;
CacheProvider和Cache接口来加入Hibernate不支持的缓存实现;
在hibernate.cfg.xml中加入:
<class-cache class="className" usage="read-only"/>
或在映射文件的class元素加入子元素:
<cache usage="read-write"/>
其中usage:read-only,read-write,nonstrict-read-write,transactional
Session的:sava(这个方法不适合native生成方式的主键);
update, savaOrUpdate,list,iterator,get,load会从二级缓存中取数据(iterator可能存在N+1次查询).
Query,Criteria(查询缓存) 由于命中率较低,所以hibernate缺省是关闭;修改cache.use_query_cache为
true打开查询缓存,并且调用query.setCacehable(true)或criteria.setCacheable(true).
SessionFactory中提供了evictXXX()方法用来清除缓存中的内容.
统计信息打开generate_statistics,用sessionFactory.getSatistics()获取统计信息,有利于在调试时使用。
实现为可插拔,通过修改cache.provider_class参数来改变;
CacheProvider和Cache接口来加入Hibernate不支持的缓存实现;
在hibernate.cfg.xml中加入:
<class-cache class="className" usage="read-only"/>
或在映射文件的class元素加入子元素:
<cache usage="read-write"/>
其中usage:read-only,read-write,nonstrict-read-write,transactional
Session的:sava(这个方法不适合native生成方式的主键);
update, savaOrUpdate,list,iterator,get,load会从二级缓存中取数据(iterator可能存在N+1次查询).
Query,Criteria(查询缓存) 由于命中率较低,所以hibernate缺省是关闭;修改cache.use_query_cache为
true打开查询缓存,并且调用query.setCacehable(true)或criteria.setCacheable(true).
SessionFactory中提供了evictXXX()方法用来清除缓存中的内容.
统计信息打开generate_statistics,用sessionFactory.getSatistics()获取统计信息,有利于在调试时使用。