Hibernate开发之二级缓存

来源:互联网 发布:手机卡能注册几个淘宝 编辑:程序博客网 时间:2024/06/05 01:59

Hibernate开发之二级缓存

一丶概述

(一)缓存:缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

(二)Hibernate提供了2个级别的缓存:第一级别的缓存是 Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,第二级别的缓存是 SessionFactory级别的缓存,它是属于进程范围的缓存。由于Hibernate的二级缓存是作用在SessionFactory范围内的,因而它比一级缓存的范围更广,可以被所有的Session对象所共享。

(三)根据功能和目的不同,SessionFactory级别的缓存又分为2类:

       1)内置缓存Hibernate 自带的,不可卸载,通常在Hibernate的初始化阶段,Hibernate会把映射元数据和预定义的 SQL语句放到SessionFactory的缓存中,该内置缓存是只读的.

       2)外置缓存:一个可配置的缓存插件,在默认情况下,SessionFactory不会启用这个缓存插件。外置缓存中的数据是数据库数据的复制,外置缓存的物理介质可以是内存或硬盘。

二丶二级缓存的适用条件

 并不是所有对象都适合放在二级缓存中,在通常情况下会将具有以下特征的数据放入到二级缓存中:

(1)很少被修改的数据

(2)不是很重要的数据,允许出现偶尔并发的数据

(3)参考数据

而对于具有以下特征的数据则不适合放在二级缓存中:

(1)经常被修改的数据

(2)财务数据,绝对不允许出现并发。

(3)与其他应用共享的数据。

三丶配置二级缓存

(一)  选择合适的缓存插件:这里我直接选用EHCache(jar包和配置文件)

Jar包在hibernate-release-4.3.0.Final\lib\optional\ehcache\.*目录下,而配置文件则在hibernate-release-4.3.0.Final相应文件中。                                     

在默认情况下,EHCache会到classpath所指定的路径中寻找ehcache.xml文件来作为EHCache的配置文件。在配置文件中,包含EHCache进行缓存管理时的一些基本的参数。具体配置如下:

    <ehcache>

    <diskStorepath="java.io.tmpdir"/>

    <defaultCache

        maxElementsInMemory="10000"

        eternal="false"

        timeToIdleSeconds="120"

        timeToLiveSeconds="120"

        overflowToDisk="true"

        />

    <cache name="sampleCache1"

        maxElementsInMemory="10000"

        eternal="false"

        timeToIdleSeconds="300"

        timeToLiveSeconds="600"

        overflowToDisk="true"

        />

</ehcache>


其中各个参数含义是:

<diskStore>:指定一个目录:当 EHCache 把数据写到硬盘上时, 将把数据写到这个目录下.

<defaultCache>:设置缓存的默认数据过期策略

<cache> 设定具体的命名缓存的数据过期策略。每个命名缓存代表一个缓存区域,缓存区域(region):一个具有名称的缓存块,可以给每一个缓存块设置不同的缓存策略。如果没有设置任何的缓存区域,则所有被缓存的对象,都将使用默认的缓存策略。即:<defaultCache.../>

(二)Hibernate的配置文件中启用二级缓存并指定和EHCache对应的缓存提供类

<!-- 配置二级缓存 -->

    <!-- 启用二级缓存 -->

    <property name="hibernate.cache.use_second_level_cache">true</property>

      

    <!-- 配置使用的二级缓存的产品 -->

    <propertyname="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

(三)选择需要使用二级缓存的持久化类, 设置它的二级缓存的并发访问策略

<class> 元素的 cache 子元素表明 Hibernate 会缓存对象的简单属性, 但不会缓存集合属性, 若希望缓存集合属性中的元素, 必须在 <set> 元素中加入 <cache> 子元素。代码示例如下:

<cache usage="read-only"/>

在 hibernate 配置文件中通过 <class-cache/> 节点配置使用缓存

<class-cacheusage="read-only"class="com.lkx.hibernate.domain.Class"/>

四丶查询缓存

对于经常使用的查询语句, 如果启用了查询缓存, 当第一次执行查询语句时, Hibernate 会把查询结果存放在查询缓存中. 以后再次执行该查询语句时, 只需从缓存中获得查询结果, 从而提高查询性能

查询缓存使用于如下场合:

应用程序运行时经常使用查询语句

很少对与查询语句检索到的数据进行插入, 删除和更新操作

启用查询缓存的步骤

配置二级缓存, 因为查询缓存依赖于二级缓存

在 hibernate 配置文件中启用查询缓存

对于希望启用查询缓存的查询语句, 调用 Query 的 setCacheable() 方法


0 0
原创粉丝点击