spring中配置hibernate二级缓存

 1.打开二级缓存的配置——applicationContext.xml

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSource"/>

<property name="hibernateProperties">

<props>

<!-- 设置方言 -->

<prop key="hibernate.dialect">

org.hibernate.dialect.MySQLDialect

</prop>

<!-- 格式化输出的sql语句(可选) -->

<prop key="hibernate.format_sql">

true

</prop>

<!-- 是否打印sql语句 -->

<prop key="hibernate.show_sql">

false

</prop>

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

<prop key="hibernate.cache.use_second_level_cache">

true

</prop>

<!-- 由于查询的缓存命中率很低,所以我们关掉查询时的二级缓存 -->

<prop key="hibernate.cache.use_query_cache">

false

</prop>

<!-- 配置二级缓存的相应的类 -->

<prop key=" hibernate.cache.provider_class">

org.hibernate.cache.EhCacheProvider

</prop>

</props>

</property>

<property name="mappingResources">

<list>

<value>bean/Person.hbm.xml</value>

</list>

</property>

</bean>

注意我标注的红色部分,这块就是配置二级缓存,具体解释有注释,在最后一个配置项中配置了二级缓存的类,这个类为外部类,所以要加入ehcache的jar包。

2.设置Ehcache默认的配置文件——ehcache.xml(放在类路径下,src目录下)

<?xml version="1.0" encoding="UTF-8"?>

<ehcache>

    <diskStore path="D:/cache"/>

    <defaultCache  maxElementsInMemory="1000"  eternal="false" overflowToDisk="true"

        timeToIdleSeconds="120"

        timeToLiveSeconds="180"

        diskPersistent="false"

        diskExpiryThreadIntervalSeconds="60"/>

<cache name="bean.Person" maxElementsInMemory="100" eternal="false"

    overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="600" diskPersistent="false"/>

</ehcache>

<!--下面是解释 -->

<!-- path定义缓存的对象默认存放到哪里 -->

<!--defaultCache节点为缺省的缓存策略 -->

<!--maxElementsInMemory为内存中最大允许存在的对象数量 -->

<!--eternal设置缓存中的对象是否永远不过期-->

<!--overflowToDisk 把溢出的对象存放到硬盘上 -->

<!--timeToIdleSeconds 指定缓存对象空闲多长时间就过期,过期的对象会被清除掉 -->

<!--timeToLiveSeconds指定缓存对象总的存活时间 -->

<!--diskPersistent 当jvm结束是是否持久化对象 -->

<!--diskExpiryThreadIntervalSeconds 指定专门用于清除过期对象的监听线程的轮询时间 -->

<!--cache中是定义一些特别的缓存,如果不进行cache的定义,那么就会采用默认的缓存技术,上面我是为这个类定义缓存 -->

注意我上面的配置文件,蓝色部分如果没有必要就不用配置。如果不配置,那么就采用的是默认的缓存技术(defaultCache中的配置),如果配置了就采用他自己的配置。

3.为需要缓存的类添加缓存配置——xxx.hbm.xml

<hibernate-mapping>

    <class name="bean.Person" table="employee" catalog="test">

    <!-- usage中配置缓存策略,当两个并发的事务可以对他同时读,但是如果一个事务对他写的话,另外一个事务就不能读 -->

    <!-- bean中定义实体类 -->

    <cache usage="read-write"  region="bean.Person"/>

        <id name="empid" type="java.lang.Integer">

            <column name="empid" />

            <generator class="identity" />

        </id>

注意我配置的红色部分,usage中配置的是缓存策略,read-write表示两个并发的事务可以同时对他读,但是如果一个事务对他写,另外一个事务就不能读。

4.学会了配置回来看看理论——什么是缓存

  缓存是数据库数据临时容器,它包含了库表数据的临时拷贝,位于数据库与数据访问层之间。ORM进行数据读取时,会根据其缓存管理策略,首先在内存中查询,如果在内存中发现所需数据(缓存命中),则直接以此数据错位查询结果加以利用,从而避免了数据库调用的性能开销。

    缓存的介质一般是内存,所以读写速度很快。但如果缓存中存放的数据量非常大时,也会用硬盘作为缓存介质。缓存的实现不仅仅要考虑存储的介质,还要考虑到管理缓存的并发访问和缓存数据的生命周期。

5.学会了配置回来看看理论——hibernate中的两个级别的缓存

Hibernate中提供了两级Cache,第一级别的缓存是Session级别的缓存,它是属于事务范围的缓存。这一级别的缓存由hibernate管理的,一般情况下无需进行干预;第二级别的缓存是SessionFactory级别的缓存,它是属于进程范围或群集范围的缓存。这一级别的缓存可以进行配置和更改,并且可以动态加载和卸载。 Hibernate还为查询结果提供了一个查询缓存,它依赖于第二级缓存。

6.学会了配置回来看看理论——缓存策略详解

1)Read-only

    只读。对于从来不会修改的数据,如参考数据,可以使用这种并发访问策略。

2)Nonstrict-read-write

    非严格读写。如果程序对并发访问下的数据同步要求不是非常严格,且数据更新操作频 率较低(几个小时以上),可以采用这种并发访问策略,获得较好的性能。

3)Read-write

    严格读写。提供了Read Committed事务隔离级别。仅仅在非集群的环境中适用。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读这类的并发问题。

4) Transactional

    事务。仅仅在托管环境中适用。它提供了Repeatable Read事务隔离级别。对于经常被读但很少修改的数据,可以采用这种隔离类型,因为它可以防止脏读和不可重复读这类的并发问题。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值