hibernate二级缓存个人理解勿喷

来源:互联网 发布:fake it til make it 编辑:程序博客网 时间:2024/04/30 19:04

首先我们先理解什么是二级缓存?

他是sessionFactory级别的缓存,sessionFactory在一个项目中是唯一的,他可以缓存业务数据,实现其他用户的共享.

那么他和session一起缓存有啥区别呢?session级别的一级缓存,通常session对象和当前线程绑定,每次客户请求,服务器分配一个线程进行处理,session级别的缓存值对当前线程有效.requese范围.

为什么使用二级缓存呢?

当我们的查询量非常大,查询的数据大部分的重复的时候可以使用,很多人会问那么我们对查询都用二级缓存不是可以减少开销,其实不然,如果你的数据经常更新又或者你的数据放入到二级缓存中而很少被使用,那就不建议使用二级缓存.

二级缓存的存储原理?

是不是二级缓存只要是经常使用,经常重复就可以使用了?这里我们聊下他的存储原理.首先它只能对查询条件为id的情况下使用,他的存储区域主要分为class区域和collection区域,class区域存储的缓存的对象,而collection区域存储的是id,通过id去匹配我们缓存的对象.这里我们举个简单的例子.比如我们的项目中有角色role和菜单menu,还有user,我们的数据库表名字相同,他们的关系式用户关联角色,角色关联菜单,即有user_idrole_id和role_id和menu_id的2张中间表.那么我们该对那些进行缓存呢?用户登录是否需要做缓存?这里我们简单的分析下:我们用户登录的时候我们发出select* from user where username=? and password=?这条语句,而我们登录之后我们的用户获得角色和菜单的方式是user.getRole().getMenu().在这里,我们可以看到用户登录不是通过Id来查找而是通过用户和密码进行查找,而我们获得角色和菜单式用过id来查找的.所以我们这里可以对角色和菜单进行缓存,减少开销.

二级缓存的配置?

1.导入jar

2.导入二级缓存框架配置

3.对需要缓存的数据,配置缓存策略(注意类级别的缓存和集合级别的缓存要分清楚)

4.为二级缓存配置提供商

5.开启二级缓存

二级缓存的性能监控

这点很重要,没有监测性能参数,而进行的优化是毫无意义的.这类我们使用sessionFactory中的getStatistics()实现二级缓存和查询缓存的监测.在配置文件中启用二级缓存监测

<</SPAN>propkey="hibernate.generate_statistics">true</</SPAN>prop>开启二级缓存的日志.

 

1 0
原创粉丝点击