Cache
hibernate提供查询缓存,用于减轻数据压力,提高数据库性能。
经常做查询,修改比较少,而且不需要事时显示的数据,甚至能允许一部分过期数据存在,这样才使用查询缓存.
hibernate提供一级缓存,二级缓存,三级缓存
缓存种类
一级缓存是Session级别的缓存。在操作数据库时需要构造Session对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的Session之间的缓存数据区域(HashMap)是互相不影响的。
二级缓存是SessionFactory级别的缓存,多个Session对象可以共用二级缓存,二级缓存是跨Session的。
三级缓存是查询缓存,针对于hql的查询功能.hql默认查询出的对象不会被一或二级缓存.三级缓存的配置是依赖于二级缓存的
缓存
一级缓存
原理
在查询的时候,每次都是先去session容器中找是否有需要的对象,如果有,直接返回.这时候因为没有与数据库交互,不会发sql语句
如果session容器中没有,session向数据库查询,这时候会发出sql语句.查询返回了对象,也会放入session中一份.只要是持久状态,session就关联.
哪些方法可以完成持久状态? get,load,save….
当调用clear,evict,close的方法的时候,session容器都会清除对象,变成游离状态,为了避免脏数据
二级缓存
hibernate整合ehcache实现二级缓存
ehcache是一个分布式缓存框架(第三方 )
ehcache缓存特点:
1支持缓存到内存
2支持缓存到硬盘
3支持缓存到数据库集群
分布式缓存
我们系统为了提高系统并发,性能、一般对系统进行分布式部署(集群部署方式)
不使用分布缓存,缓存的数据在各各服务单独存储,不方便系统 开发。所以要使用分布式缓存对缓存数据进行集中管理。
hibernate无法实现分布式缓存,需要和其它分布式缓存框架进行整合。
整合方法
hibernate提供了一个缓存接口,如果要实现自己的缓存逻辑,实现缓存接口开发即可。
hibernate和ehcache整合,hibernate和ehcache整合包中提供了一个cache接口的实现类。
配置
导入包:
在根目录下添加ehcache的配置文件
启动二级缓存
<property name="cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
设置哪些类的对象需要缓存
test
二级缓存应用场景
对于访问多的查询请求且用户对查询结果实时性要求不高,此时可采用hibernate二级缓存技术降低数据库访问量,提高访问速度,业务场景比如:耗时较高的统计分析sql、电话账单查询sql等
原文地址:http://www.cnblogs.com/eguhu/p/7886704.html