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

标签: hibernate 缓存 缓存 | 发表时间:2012-11-12 16:56 | 作者:Deo_lx
出处:http://blog.csdn.net

关于缓存:

1、缓存是数据库数据在内存中的临时容器,它包含了库表数据在内存中的临时拷贝,位于数据库和访问层之间。


2、ORM在进行数据读取时,会根据缓存管理策略,首先在缓冲中查询,如果发现,则直接使用,避免数据库调用的开销。

3、数据缓存的策略:
事务级缓存:当前事务范围内的数据缓存
应用级缓存:某个应用中的数据缓存
分布式缓存:多个应用,多个JVM之间共享缓存。分布式缓存由多个应用级缓存实例组成集群,通过某种远程机制实现各个缓存实例之间的数据同步,任何一个实例的数据修改后,将导致整个集群间的数据状态同步。


4、Hibernate缓存分为两个层次:一级缓存和二级缓存


5.Hibernate的缓存在两种情况下发挥作用:

根据主键加载实体  get,load
加载关联对象

使用HQL查询时 List,iterator


一级缓存:

1、一级缓存的数据结构是Map,用于存储查询实体。Map的key存放实体的Id,Map的value存放实体本身。所以   一级缓存无法存储查询的属性。


2、一级缓存的生命周期与Session有关,Session产生一级缓存创建,Session关闭一级缓存销毁


3、Get,Load,Iterator方法读写一级缓存,List方法只写不读一级缓存


4、一级缓存不能禁用,但可以通过Session的clear方法和evict方法清理一级缓存,从而达到禁止写缓存的效   果


5、Session的save方法会写缓存,在批量插入数据时要注意对一级缓存做定时清理。Hibernate的批量处理效率不高,建议使用Session.connection()或得Jdbc连接后使用Jdbc的相关API做批处理操作


二级缓存:

1、二级缓存也称进程级的缓存或SessionFactory级的缓存,二级缓存可以被所有的session共享。


2、二级缓存的生命周期和SessionFactory的生命周期一致,SessionFactory可以管理二级缓存。


3、Hibernate 默认情况下是打开的,提供一个Hashtable存储二级缓存,但只适用于研发,开发中为第三方缓   存组件提供了接入接口,我们可以根据不同情况选择不同的实现。


4、二级缓存也只能缓存实体对象,不缓存属性。


5、ehcache二级缓存的配置和使用:
* 将echcache.xml文件拷贝到src下
* 开启二级缓存,修改hibernate.cfg.xml文件
<property name="hibernate.cache.use_second_level_cache">true</property>
* 指定缓存产品提供商,修改hibernate.cfg.xml文件
<property            
name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>

* 指定那些实体类使用二级缓存(两种方法)
* 在映射文件中采用<cache>标签
* 在hibernate.cfg.xml文件中,采用<class-cache>标签

二级缓存的特性:

1、Get,Load,Iterator方法读写二级缓存,List方法只写不读二级缓存


2、设置<property name=“hibernate.cache.use_second_level_cache”>fasle</property>可以禁用二级缓存。


3、在一次Session交互中,可以设置Session的CacheMode为Put来禁用读操作,设置CacheMode为Get来禁用写操作

4、 也可以通过SessionFacotry的evict方法清理二级缓存来达到禁止写二级缓存的效果


查询缓存:

1、查询缓存是针对普通属性结果集的缓存,对实体对象的结果集只缓存id

2、查询缓存的生命周期为当前关联的表发生修改,那么查询缓存生命周期结束

3、查询缓存的配置和使用:
* 在hibernate.cfg.xml文件中启用查询缓存,如:
<property name="hibernate.cache.use_query_cache">true</property>
* 在程序中必须手动启用查询缓存,如:
query.setCacheable(true);
4、List方法读写查询缓存,Iterator不读查询缓存
  二级缓存和查询缓存搭配使用效果最佳




作者:Deo_lx 发表于2012-11-12 16:56:20 原文链接
阅读:0 评论:0 查看评论

相关 [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一二级缓存,查询缓存,n+1次查询问题

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

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

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

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

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