Hibernate+ehcache二级缓存技术

1、首先设置EhCache,建立配置文件ehcache.xml,默认的位置在class-path,可以放到你的src目录下:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
  <diskStore path="java.io.tmpdir"/>
   <defaultCache
    maxElementsInMemory="10000" <!-- 缓存最大数目 -->
    eternal="false" <!-- 缓存是否持久 -->
    overflowToDisk="true" <!-- 是否保存到磁盘,当系统当机时-->
    timeToIdleSeconds="300" <!-- 当缓存闲置n秒后销毁 -->
    timeToLiveSeconds="180" <!-- 当缓存存活n秒后销毁-->
    diskPersistent="false"
    diskExpiryThreadIntervalSeconds= "120"/>
</ehcache>

2、在Hibernate配置文件中设置:

<!-- 设置Hibernate的缓存接口类,这个类在Hibernate包中 -->
<property name="cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
  <!-- 是否使用查询缓存 -->
  <property name="hibernate.cache.use_query_cache">true</property>
   如果使用spring调用Hibernate的sessionFactory的话,这样设置:
   <!--HibernateSession工厂管理 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
     <ref bean="datasource" />
    </property>
    <property name="hibernateProperties">
    <props>
     <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
     <prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
     <prop key="hibernate.show_sql">true</prop>
     <prop key="hibernate.cache.use_query_cache">true</prop>
     <prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
    </props>
  </property>
  <property name="mappingDirectoryLocations">
   <list>
    <value>/WEB-INF/classes/cn/rmic/manager/hibernate/</value>
   </list>
  </property>
</bean>

说明一下:如果不设置“查询缓存”,那么hibernate只会缓存使用load()方法获得的单个持久化对象,如果想缓存使用findall()、list()、Iterator()、createCriteria()、createQuery()等方法获得的数据结果集的话,就需要设置

hibernate.cache.use_query_cache true 才行

3、在Hbm文件中添加<cache usage="read-only"/>

4、如果需要“查询缓存”,还需要在使用Query或Criteria()时设置其setCacheable(true);属性

时间: 2025-01-20 21:12:09

Hibernate+ehcache二级缓存技术的相关文章

Hibernate中二级缓存的配置和使用

(一)Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * from table_name where -. (选择所有字段)这样的SQL语句查询数据库,一次获得所有的数据对象. 2) 把获得的所有数据对象根据ID放入到第二级缓存中. 3) 当Hibernate根据ID访问数据对象的时候,首先从Session一级缓存中查:查不到,如果配置了二级缓存,那么从二级缓存中查:查不到,再查询数据库,把结果按照ID放入到缓存. 4) 删除.更新.增加数据的时

浅析Hibernate 3二级缓存基础

在向大家详细介绍Hibernate 3之前,首先让大家了解下Hibernate 3二级缓存,以后全面介绍Hibernate 3. 1.Hibernate 3二级缓存和session级别的缓存一样都只对实体对象做缓存,不对属性级别的查询做缓存:二级缓存的生命周期和sessionFactory的生命周期是一样的,sessionFactory可以管理二级缓存: 2.sessionFactory级别的缓存,需要手动配置:所有的session可以共享sessionFactory 级别的缓存:(一般把一些不

Hibernate的二级缓存问题

问题描述 Hibernate的二级缓存问题 1.hibernate.cfg.xml配置如下 <!-- 设置二级缓存供应商 --> <property name="cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> <!-- 开启二级缓存 --> <property name="cache.use_second_level_cache&

hibernate-关于Hibernate的二级缓存配置

问题描述 关于Hibernate的二级缓存配置 配置二级缓存时在实体xx.hbm.xml中配置的 <cache usage="read-only" include="non-lazy" region="personCache"/> 关于这个include属性,我看官方文档上说all是对所有属性就行缓存,non-lazy是对不是lazy加载的属性缓存,问题是我怎么判断它到底有没有对lazy="true"的属性缓存呢?

ehcache二级缓存不起作用??

问题描述 我的一个小项目里面设置了二级缓存,并把缓存溢出的磁盘放在D盘里面,当我把缓存的最大存放量设为一的时候,在D盘可以看到有,缓存的记录,但是等我再去取值的时候,怎么还是从数据库里面拿 啊 ??? 问题补充:alyouge 写道 解决方案 说的不详细,一下几点需要注意!1. 要在spring配置文件加入Java代码 <prop key="hibernate.cache.use_second_level_cache">true</prop> <prop

hibernate memcached 二级缓存无效

问题描述 我用memcached配置的二级缓存Spring-hibernate配置: <property name="hibernateProperties"> <props> <prop key="hibernate.connection.SetBigStringTryClob">true</prop> <prop key="hibernate.dialect">${hibernate

hibernate Search 继续研究 增加 hibernate memcache 二级缓存 配置成功 附件maven代码(2)

首先安装 memecached 服务端:   之前写过的 文章,centos 安装memcached服务 :   http://toeo.iteye.com/blog/1240607   然后 在 前几天的 弄的  hibernate search 基础上,再添加 memcached 缓存.   因为 hibernate search 虽然 建立了索引.查询速度快了..但是依然要 load 数据.   证据就是 可以看到搜索如果有结果  肯定会执行 hql 将数据一次都查询出来.   Hiber

hibernate不启用二级缓存的情况下find()还会保存缓存吗

问题描述 如题 hibernate中如果不启用二级缓存 find()方法查询出来的数据还会保存在二级缓存中吗? 解决方案 不会.只会被加入到一级缓存.

Hibernate使用二级缓存的问题.请大家帮忙看下。

问题描述 我在做Hibernate中做测试的时候 ,使用的是Hibernate3.32版本,在Hibernate.cfg.xml文件中配置了二级缓存.但是在不同的条件下查询的时候,会从数据库里面查询,不会从二级缓存中取出数据, 我看了一下我的打印出的log信息.有两条sql语句.下面是我的Hibernate.cfg.xml配置文件:<session-factory><property name="connection.username">root</pro