- 浏览: 3437536 次
- 性别:
- 来自: China
文章分类
- 全部博客 (536)
- ajax (1)
- Algorithm (14)
- Android (40)
- CSS/HTML... (2)
- defy (3)
- DesignPattern (2)
- dorado (0)
- Drools (6)
- English/日本語 (7)
- Flex (2)
- Framework (0)
- Google (3)
- hibernate (13)
- homework (3)
- HTML5 (0)
- IDE (29)
- java (45)
- javaee (7)
- Javascript (14)
- java组件 (5)
- jQuery (4)
- jsp (8)
- jsf (2)
- Linux (2)
- lucene (0)
- mysql (6)
- news (3)
- Oracle (8)
- other (4)
- PHP (5)
- Python (0)
- Software Engineering (3)
- spring (7)
- struts1.x (14)
- struts2.x (14)
- strolling in cloud (1)
- subject:javaEnhance (20)
- Tomcat (7)
- validator (3)
- 学习·方法·心得 (8)
- .NET (2)
- vba (6)
- groovy (5)
- grails (2)
- SWT (0)
- big data (1)
- perl (1)
- objective-c (50)
- product (1)
- mac (7)
- ios (188)
- ios-phone (2)
- ios-system (15)
- ios-network (5)
- ios-file (4)
- ios-db (1)
- ios-media (3)
- ios-ui (27)
- ios-openSource (6)
- ios-animation (5)
- ios-drawing (7)
- c (2)
- ios-app (2)
- ios-course (15)
- ios-runtime (14)
- ios-code (8)
- ios-thread (8)
- ios-LBS (2)
- ios-issue (1)
- ios-design (2)
- Jailbreak (2)
- cocos2d (0)
- swift (16)
- ios-framework (4)
- apple watch (4)
- ios-web (1)
- react native (3)
- TVOS (1)
- OpenGL (1)
最新评论
-
xiaobinggg:
...
Session机制详解 -
菜鸟学生会:
Drools规则工作流引擎开发教程网盘地址:http://pa ...
Drools入门-----------环境搭建,分析Helloworld -
wangyudong:
不是很好用,不支持自动化测试RESTful API,也不支持自 ...
Simple REST Client POST使用方法 -
Paul0523:
很棒的一篇文章,感谢楼主分享
Session机制详解 -
啸笑天:
获取原型对象的三种方法<script>functi ...
复习JavaScript面向对象技术
缓存的作用主要用来提高性能,可以简单的理解成一个Map;使用缓存涉及到三个操作:把数据放入缓存、从缓存中获取数据、删除缓存中的无效数据。
一级缓存,Session级共享。
save,update,saveOrUpdate,load,get,list,iterate,lock这些方法都会将对象放在一级缓存中,一级缓存不能控制缓存的数量,所以要注意大批量操作数据时可能造成内存溢出;可以用evict,clear方法清除缓存中的内容。
随着sesssion的关闭session缓存就关闭了
看到hql,sql语句就不能从一级缓存中取,例如Query
-------------------------------------------------------------------------------------------------------
二级缓存,SessionFactory级共享。
·实现为可插拔,通过修改cache.provider_class参数来改变;
hibernate内置了对EhCache,OSCache,TreeCache,SwarmCache的支持。可以通过实现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的save(这个方法不适合native生成方式的主键),
update,saveOrUpdate,list,iterator,get,load,以及Query,Criteria都会填充二级缓存,但只有(没打开查询缓存时)Session的iterator,get,load会从二级缓存中取数据(iterator可能存在N+1次查询)。
·Query,Criteria(查询缓存)由于命中率较低,所以hibernate默认是关闭;修改cache.use_query_cache为true打开对查询的缓存,并且调用query.setCacheable(true)或criteria.setCacheable(true)。
·SessionFactory中提供了evictXXX()方法用来清除缓存中的内容。例:HibernateUtil.getSessionFactory().evict(User.class);
·统计信息打开generate_statistics,用sessionFactory.getSatistics()获取统计信息。
例子:
Hibernate采用第三方缓存控制,我们使用oscache来演示首先需要加入oscache2.1.jar这个库文件,在Hibernate3.3.2中lib文件夹下的optional文件夹内。
另外需要加入oscache的配置文件,在Hibernate3.3.2/porject/etc下找到oscache.proprities文件,黏贴到工程src目录下即可
我用的是Hibernate3.3.2,还需要加载common-logging-1.1.jar这个库,因为oscache使用的日志框架是common-logging。
添加完以后我们修改hibernate.cfg.xml配置文件:加入
<!-- 二级缓存 --> <property name="cache_user_second_level_cache">true</property> <!-- 使用二级缓存 --> <property name="cache.provider_class">org.hibernate.cache.OSCacheProvider</property> <!--使用oscache-->
另外我们还需要指定哪些类需要采用缓存机制,以Users为例
修改Users.hbm.xml配置(还可以在hibernate.cfg.xml中配置:<class-cache class="domain.Users(全类名)" usage="read-only"/>)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="domain"> <class name="Users"> <cache usage="read-write"/> <id name="id"> <generator class="native"/> </id> <property name="name"></property> <property name="birthday"></property> </class> </hibernate-mapping>
下面输出一下oscache的统计信息看看,即cache的命中率,当然打开统计信息消耗不少的资源(开发测试时可能要看)
hibernate.cfg.xml中加入
<!-- 打开二级缓存统计信息 --> <property name="generate_statistics">true</property>
程序代码中:
Statistics st = HibernateUtil.getSessionFactory().getStatistics(); System.out.println(st); System.out.println("put:" + st.getSecondLevelCachePutCount());//加入二级缓存次数 System.out.println("hit:" + st.getSecondLevelCacheHitCount());//命中次数 System.out.println("miss:" + st.getSecondLevelCacheMissCount());//没有命中次数
-------------------------------------------------------------------------------------------------------------
·分布式缓存和中央缓存。
大型的系统往往是一台数据库,多台web服务器,那么如何协调好多台web服务器上的缓存同步就会存在很大的问题。
比如u1 u2 两个用户分别访问w1 w2 两台服务器,同时读取了user对象信息,那么两台服务器上的数据就会分别保存在w1 w2的缓存上,如果u1更新了user的信息,那么w2的缓存依然还是没更新前的数据,u2读到的数据不是正确的数据。
这种分布式缓存对更新的成本比较高
另外是把缓存独立出来,w1 w2共用一台缓存服务器(中央缓存),那么更新方面的问题是解决了,但是读取数据的开销也大了,不再是本地缓存读取,需要连接缓存服务器读取了。
·使用缓存的条件
1.读取大于修改。
2.数据量不能超过内存容量。
3.对数据要有独享的控制。
4.可以容忍出现无效数据。
发表评论
-
OpenSessionInViewFilter 的配置及替代方案
2011-09-19 14:39 42623Spring 为我们提供了一个叫做 OpenSessionIn ... -
OpenSessionInViewFilter源码分析
2011-09-19 14:28 2681从书上我了解到Session接口是Hibernate向 ... -
hibernate-3.2.5.ga的hibernate.properties
2011-06-07 21:32 2697######################### Query ... -
Hibernate3的配置参数汇总
2011-06-07 21:26 5003SQL方言1、Hibernate JDBC属 ... -
Hibernate异常与会话
2011-06-07 16:59 2625Hibernate的事务和并发 Hibernate的事务和并发 ... -
Hibernate事务
2011-06-07 16:03 8435JDBCTransaction 单个数据库(一个Se ... -
Hibernate懒加载
2011-06-06 02:35 1530通过asm和cglib二个包实现;Domain是非fin ... -
Hibernate的4种继承关系
2011-06-05 17:05 11113一、继承关系_整个继承树映射到一张表 对象模型(Java类结 ... -
Hibernate 积累
2011-05-29 11:08 1710解决实体类或属性名 ... -
hibernate.current_session_context_class
2011-05-27 15:10 29420遇到过的问题: 情景1: 在使用SessionFactor ... -
Hibernate的一对一关联实例
2010-10-24 11:15 0Hibernate的一对一关联实例 Hibernate中 ... -
Hibernate code
2010-10-24 10:46 0<?xml version=" ... -
Hibernate遇到过的问题
2010-05-27 00:46 14021 执行到中途产生这个异常:org.hibernate.ex ... -
hbm2ddl.auto属性详解(hibernate自动建表)
2010-05-22 17:45 9478hibernate配置属性中,hi ...
相关推荐
深入理解hibernate缓存,不再惧怕hibernate缓存...
Hibernate缓存.docHibernate缓存.doc
Java Hibernate缓存深入详解
hibernate缓存机制 hibernate缓存机制 hibernate缓存机制
Hibernate 缓存 深入 详解 ITEye
关于hibernate缓存的一个ppt课件,60+幻灯片,有需要的可以看一下
Hibernate是一种面向Java环境的ORM工具。系统地分析了Hibernate的缓存结构,并描述了二级缓存的查询过程、缓存策略;同时总结了二级缓存使用中的一些限制,以及使用二级缓存的优化策略。
Hibernate缓存深入详解,很好的缓存原理参考资料
Hibernate缓存,性能优化
hibernate的缓存机制以及优化策略
关于hibernate缓存的讲解,以及缓存的优化。讲的非常透彻,对于项目中Hibernate缓存的优化会有很大帮助!
Hibernate缓存原理及调优策略 Hibernate缓存原理调优策略
hibernate缓存深入详解
使用Hibernate缓存数据.ppt
hibernate缓存的问题,使你更清楚的认识HIBERNATE