码迷,mamicode.com
首页 > Web开发 > 详细

hibernate缓存

时间:2017-12-01 23:41:34      阅读:331      评论:0      收藏:0      [点我收藏+]

标签:管理   目录   持久   无法   技术   性能   分布   特点   启动   

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等

 

hibernate缓存

标签:管理   目录   持久   无法   技术   性能   分布   特点   启动   

原文地址:http://www.cnblogs.com/eguhu/p/7886704.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!