Hibernate 缓存

标签: hibernate 缓存 | 发表时间:2012-11-12 00:46 | 作者:
出处:http://www.iteye.com
1数据缓存:(date caching) 是一种将数据暂时存于内存缓存去中的技术,缓存通常是影响系统性能的关键因素

2.ORM的数据缓存策略有3中
  1.事务级缓存:  分为 数据库事务和 应用级事务,是基于Session的生命周期的实现,每个session都会在内部维持一个数据缓存, 随session的创建和消亡.

  2.应用级缓存:有多个事务共享,在SessionFactory层实现,又SessionFactory创建的session都共享次缓存

  3.由多个应用实例,多个JVM共享的缓存模式,通过远程机制实现数据的同步.解决了多实例运行过程中数据的同步问题.

Hibernate 的缓存  只要从下面两个方面发生作用
1.通过主键值加载对象
2.延迟加载

一级缓存
释义:就是session缓存,就是一个Map,一个 id为key Object 为value 的Map,Hibernate对一级缓存使用自动维护,没有提供任何配置功能,但是可以通过session提供方法来进行一些手动的干预,
必须的 不能卸载的

1.evict(); 用于将对象从Session的一级缓存中清除
2.clear(); 将一级缓存中的对象全部清除.

从上面可以看出 session缓存中不可能存在两个id 相同的key 对应的object
所以 使用 session保存或者 udpate 的时候 需要使用 evict()清除指定的重复对象.
 
1.evict()的使用
public void testEvict(){
		Configuration config=new Configuration().configure();
		SessionFactory factory=config.buildSessionFactory();
		Session session=factory.openSession();
		Transaction tr=session.beginTransaction();
		//一级缓存: session缓存 中 通过 id 获取对象
		Integer deptId=new Integer(21);
		Dept deptOne=(Dept)session.get(Dept.class, deptId);
		
		Dept deptTwo =new Dept();
		deptTwo.setDeptId(deptId);
		deptTwo.setDeptName("采购部");
		deptTwo.setCreateDate("2000-03-10");
		
		session.evict(deptOne); //如果不先清楚 相同id的 deptOne   下面的 saveOrUpdate 就会报错
		session.saveOrUpdate(deptTwo);
		
		tr.commit();
	}


2.clear的使用 (如果执行批量修改的时候 需要使用大量的缓存这是就定时清空缓存)
public void testClear(){
		Configuration config=new Configuration().configure();
		SessionFactory factory=config.buildSessionFactory();
		Session session=factory.openSession();
		Transaction tr=session.beginTransaction();
		for(int i=0;i<10000;i++){
			Dept deptTwo=new Dept();
			deptTwo.setDeptName("才购物");
			deptTwo.setCreateDate("2002-01-02");
			session.save(deptTwo);
			if(i%20==0){
				session.flush();
				session.clear();
			}
		}
		tr.commit();
		session.close();
	}


二级缓存
释义:1实现原理 和一级缓存一样 同样是一个 Id 为key Object 为value的一个Map集合
2只是作用范围 扩大到 sessionFactory ,能够被所有的session共享
3.非必须 可选的 ,可插拔缓存插件,能够在每个类或者集合的粒度上配置.

功能分类:
    内置缓存: 只读用于存放映射文件的数据及预定的sql语句,
              映射元数据是映射文件中数据的副本
              预定的sql语句:由Hibernate在初始化阶根据元数据推导生成.
    外置缓存: 为配置插件,一般不启用.

二级缓存的工作过程:
1.执行各种查询时,如果将获取的结果集为实体对象的集合,则将所有的实体对象根据id 存放 Map集合  即 二级缓存.

2.根据id 获取对象的时候,首先会在一级缓存中查找,如果无法找到,而此时这个类二级缓存,则将在二级缓存中继续查找,若仍然无法找到,则会从数据库中查找,然后将结果通过id放入缓存中,

3.删除 ,更新及 增加的时候  更新缓存

二级缓存的使用
1.作为一个可插入主键,一般在爱使用的时候进行配置,只有具备一下特征的对象菜可以放入二级缓存中.
  1 较少被修改的数据
  2.非重要,能偶尔出现并发的数据
  3.不会被并发访问的数据
  4.参数数据

相对而言, 以下特征数据不适合放入二级缓存
  1.常被修改
  2.参悟数据, 绝不容许出现并发
  3.与其他应用共享


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [hibernate 缓存] 推荐:

Hibernate 缓存

- - ITeye博客
1数据缓存:(date caching) 是一种将数据暂时存于内存缓存去中的技术,缓存通常是影响系统性能的关键因素. 2.ORM的数据缓存策略有3中.   1.事务级缓存:  分为 数据库事务和 应用级事务,是基于Session的生命周期的实现,每个session都会在内部维持一个数据缓存, 随session的创建和消亡.

Hibernate 二级缓存

- - CSDN博客推荐文章
很多人对二级缓存都不太了解,或者是有错误的认识,我一直想写一篇文章介绍一下hibernate的二级缓存的,今天终于忍不住了. 我的经验主要来自hibernate2.1版本,基本原理和3.0、3.1是一样的,请原谅我的顽固不化. hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了.

Hibernate 缓存总结

- - 行业应用 - ITeye博客
1.         一级缓存只缓存整个对象,不能缓存对象属性;. 2.         一级缓存是Session级的缓存,不能跨多个Session对象来使用;. 3.         Session的load/get方法支持一级缓存的读和写;. 4.         Query的list接口只支持一级缓存的写入,不能从一级缓存中读出对象.

Hibernate的缓存机制

- - 企业架构 - ITeye博客
缓存是数据库数据在内存中的临时容器,它包含了库表数据在内存中的临时拷贝,位于数据库与应用程序之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高应用的运行性能. Hibernate的缓存机制. 1.1持久化层的缓存的范围.      持久层设计中,往往需要考虑几个不同层次中的数据缓存策略.

hibernate缓存,一级缓存,二级缓存,查询缓存

- - CSDN博客推荐文章
1、缓存是数据库数据在内存中的临时容器,它包含了库表数据在内存中的临时拷贝,位于数据库和访问层之间. 2、ORM在进行数据读取时,会根据缓存管理策略,首先在缓冲中查询,如果发现,则直接使用,避免数据库调用的开销. 事务级缓存:当前事务范围内的数据缓存. 应用级缓存:某个应用中的数据缓存. 分布式缓存:多个应用,多个JVM之间共享缓存.

在Spring、Hibernate中使用Ehcache缓存

- - BlogJava-首页技术区
前一篇 http://www.blogjava.net/hoojo/archive/2012/07/12/382852.html介绍了Ehcache整合Spring缓存,使用页面、对象缓存;这里将介绍在Hibernate中使用查询缓存、一级缓存、二级缓存,整合Spring在HibernateTemplate中使用查询缓存.

关于hibernate的缓存使用

- - 开源软件 - ITeye博客
原文地址:http://blog.csdn.net/woshichenxu/article/details/586361. 1.     关于hibernate缓存的问题:. 1.1.1.          基本的缓存原理. Hibernate缓存分为二级,第一级存放于session中称为一级缓存,默认带有且不能卸载.

性能优化之Hibernate缓存讲解、应用和调优

- - CSDN博客系统运维推荐文章
    近来坤哥推荐我我们一款性能监控、调优工具——JavaMelody,通过它让我觉得项目优化是看得见摸得着的,优化有了针对性. 而无论是对于分布式,还是非分布,缓存是提示性能的有效工具.     数据层是EJB3.0实现的,而EJB3.0内部也是通过Hibernate实现的,而Hibernate本身提供了很好的缓存机制,我们只需要学会使用它驾驭它就够了.

hibernate一二级缓存,查询缓存,n+1次查询问题

- - 行业应用 - ITeye博客
在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别)、二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题. 随笔虽长,但我相信看完的朋友绝对能对hibernate的 N+1问题以及缓存有更深的了解. 首先我们来探讨一下N+1的问题,我们先通过一个例子来看一下,什么是N+1问题:.

hibernate缓存机制详细分析(一级、二级、查询缓存,非常清晰明白)

- - 编程语言 - ITeye博客
收藏自:http://www.360doc.com/content/14/0801/16/1073512_398635409.shtml. 在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别)、二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题.