- 浏览: 3461065 次
- 性别:
- 来自: 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 42659Spring 为我们提供了一个叫做 OpenSessionIn ... -
OpenSessionInViewFilter源码分析
2011-09-19 14:28 2724从书上我了解到Session接口是Hibernate向 ... -
hibernate-3.2.5.ga的hibernate.properties
2011-06-07 21:32 2727######################### Query ... -
Hibernate3的配置参数汇总
2011-06-07 21:26 5081SQL方言1、Hibernate JDBC属 ... -
Hibernate异常与会话
2011-06-07 16:59 2656Hibernate的事务和并发 Hibernate的事务和并发 ... -
Hibernate事务
2011-06-07 16:03 8468JDBCTransaction 单个数据库(一个Se ... -
Hibernate懒加载
2011-06-06 02:35 1564通过asm和cglib二个包实现;Domain是非fin ... -
Hibernate的4种继承关系
2011-06-05 17:05 11165一、继承关系_整个继承树映射到一张表 对象模型(Java类结 ... -
Hibernate 积累
2011-05-29 11:08 1748解决实体类或属性名 ... -
hibernate.current_session_context_class
2011-05-27 15:10 29532遇到过的问题: 情景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 14401 执行到中途产生这个异常:org.hibernate.ex ... -
hbm2ddl.auto属性详解(hibernate自动建表)
2010-05-22 17:45 9507hibernate配置属性中,hi ...
相关推荐
**Hibernate缓存深入详解** 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,数据访问性能成为了一个不可忽视的问题。这时,...
### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...
Hibernate缓存.docHibernate缓存.doc
Java Hibernate缓存深入详解
### Hibernate缓存机制及优化策略 #### 一、概述 Hibernate作为一款优秀的对象关系映射(ORM)框架,在Java开发领域被广泛应用于数据库操作。它提供了丰富的缓存机制来提高应用性能并降低数据库访问压力。本文将...
**标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...
Hibernate缓存机制是提高应用程序性能的关键技术之一,它通过存储数据副本减少对物理数据库的访问。缓存可以分为两层:第一级缓存和第二级缓存。 **第一级缓存**是内置在Session中的,它是不可卸载的,也称为...
关于hibernate缓存的一个ppt课件,60+幻灯片,有需要的可以看一下
【Hibernate缓存深入详解】 在Java的持久化框架Hibernate中,缓存机制是提升系统性能的关键因素。它位于Hibernate应用和数据库之间,减少了对数据库的直接访问,从而提高了应用程序的运行速度。缓存中存储的是...
**Hibernate缓存详解** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。为了提高数据访问性能,Hibernate引入了缓存机制,它可以减少对数据库的直接访问,从而提升应用的...
本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### Hibernate缓存原理 Hibernate缓存主要分为一级缓存和二级缓存。一级缓存,也称为会话缓存(Session Cache),是默认启用的,由Hibernate自动...
Hibernate 是一个流行的对象关系映射(ORM)框架,它允许Java...通过理解Hibernate缓存和事务管理,以及如何有效地执行查询,开发者可以创建高效、健壮的Java应用程序,降低与数据库交互的复杂性,同时提升系统性能。
**标题解析:** "Hibernate教程25_Hibernate缓存" 这个标题表明了我们要讨论的是关于Hibernate框架的第25个教程,重点是它的缓存机制。Hibernate是一个流行的Java对象关系映射(ORM)框架,它允许开发者用面向对象的...
【Hibernate缓存管理】是数据库持久化框架Hibernate中优化性能的关键技术。缓存的主要目的是减少对数据库的直接访问,提高应用程序的运行效率。缓存的数据是数据库中数据的副本,存在于内存或硬盘中,便于快速读取。...
这篇博客文章“hibernate缓存ehcache用法”可能详细介绍了如何在Hibernate中配置和使用Ehcache。 首先,我们需要理解什么是缓存。缓存是一种存储技术,用于临时保存经常访问的数据,以减少对主存储器(如数据库)的...
【Hibernate缓存详解】 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。其缓存机制是提升系统性能的关键所在。本篇将深入探讨Hibernate的缓存机制,包括一级缓存和二级...