EhCache是一个纯JAVA程序,可以在Hibernate中作为一个插件引入。在Hibernate中使用EhCache需要在Hibernate的配置文件中设置如下:
<!-- 开启二级缓存 --> <property name="hibernate.cache.use_second_level_cache">true</property> <!-- 设置缓存提供者 --> <property name="hibernate.cache.provider_class"> org.hibernate.cache.EhCacheProvider </property> <!-- 是否使用查询缓存 --> <property name="hibernate.cache.use_query_cache">true</property>
设置EhCache,建立配置文件ehcache.xml,默认的位置在class-path,可以放到你的src目录下:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="c:\\cache"/> <!--设置cache.data文件存放位置-->
<defaultCache
maxElementsInMemory="10000" <!-- 缓存最大数目 -->
eternal="false" <!-- 缓存是否持久 -->
overflowToDisk="true" <!-- 是否保存到磁盘,当系统当机时-->
timeToIdleSeconds="300" <!-- 当缓存闲置n秒后销毁 -->
timeToLiveSeconds="180" <!-- 当缓存存活n秒后销毁-->
diskPersistent="false"
diskExpiryThreadIntervalSeconds= "120"/> <!--设定缓存在硬盘上的生存时间-->
</ehcache>
注意当eternal="true"时
timeToIdleSeconds,timeToLiveSeconds和diskExpiryThreadIntervalSeconds都是无效的。
此时缓存已经启用了,但是并没有被使用。它不会去自动把所有的实体都进行缓存了,而是需要手动指定哪个实体需要缓存,以及其缓存的策略。有两种方式指定哪些实体类使用缓存。
第一种是修改要使用缓存的实体的映射文件。如在User.hbm.xml中使用<cache>标签启用。
<hibernate-mapping>
<class name="cn.ineeke.entity.User" table="t_user">
<cache usage="read- write "/>
<id name="id">
<generator class="native"/>
</id>
<property name="name"/>
</class>
</hibernate-mapping>
第二种方式是在hibernate.cfg.xml中使用<class-cache>标签指定实体类并启用。
<!-- 指定哪些实体需要使用二级缓存 -->
<class-cache class="com.pojo.User" usage="read-only"/>
如果需要“查询缓存”,还需要在使用Query或Criteria()时设置其setCacheable(true);属性
Session s=HibernateSessionFactory.getSession();
Criteria c=s.createCriteria(Resources.class);
c.setCacheable(true);
List l=c.list();
……
配置log4j.properties文件
#方便看到ehcache的操作过程,主要用于调试过程,实际应用发布时候,请注释掉,以免影响性能。
log4j.logger.org.hibernate.cache=debug
分享到:
相关推荐
并发访问策略是缓存设计的关键,特别是在二级缓存中。事务型策略提供了 Repeatable Read 隔离级别,适用于多读少写的场景,能防止脏读和不可重复读。读写型策略提供 Read Committed 隔离级别,适用于非集群环境,...
EhCache 缓存插件是 Hibernate 框架内置的,对于单机应用推荐使用它做为 Hibernate 的二级缓存。 二、环境配置 要使用 EhCache 二级缓存,需要进行以下环境配置: 1. 安装 MySql 5.0 数据库 2. 安装 Hibernate ...
本篇将深入探讨Hibernate的一级缓存和二级缓存,以及查询缓存的配置和使用。 ### 一级缓存 一级缓存是Hibernate默认提供的缓存,它是Session级别的,每个Hibernate Session都有一个私有的、本地的一级缓存。当我们...
- **依赖二级缓存**:查询缓存的结果依赖于二级缓存,只有实体对象存在于二级缓存中,查询结果才能被缓存。 - **不保证数据一致性**:查询缓存不提供数据一致性保证,可能存在脏读问题。因此,适用于那些对实时性...
Hibernate+ehcache二级缓存技术 Hibernate+ehcache二级缓存技术
### 配置EhCache二级缓存 #### 一、简介 EhCache是一个高性能、易于使用的开源缓存系统,最初由 Terracotta 组织开发。它支持多种缓存模型,包括本地缓存和分布式缓存。由于其简单易用且功能强大,EhCache 成为了 ...
Ehcache是Hibernate的一个可选二级缓存插件,用于存储数据库查询结果,减少对数据库的直接访问。当相同的数据再次被请求时,可以从缓存中快速获取,提高系统响应速度。在不使用缓存的情况下,可以通过配置关闭。 5...
2. **配置hibernate.cfg.xml**:在Hibernate的配置文件中,开启二级缓存支持并指定使用ehcache。添加以下配置: ```xml <property name="hibernate.cache.use_second_level_cache">true <property name="...
Ehcache是Java中广泛使用的内存缓存库,它支持内存和磁盘缓存,具有高效的缓存管理和数据持久化能力,因此被选为Hibernate的二级缓存提供商。要使用Ehcache,我们首先需要在项目中引入Ehcache的依赖。在Maven项目中...
一级缓存是每个 Hibernate Session 的私有缓存,而二级缓存则可以跨 Session 共享,Ehcache 就是常见的二级缓存实现。 7. **事务管理**:在整合 Hibernate 和 Ehcache 时,必须注意事务管理,确保缓存与数据库的...
SSH三层架构MVC(struts1.3+spring2.x+hibernate3.2),Hibernate(ehcache)二级缓存技术,Spring 注解形式依赖注入,ehcache缓存 源代码,内有MySql anbyke.sql文件,方便创建数据库演示效果!
然后,在Hibernate的配置文件(如hibernate.cfg.xml)中启用二级缓存并指定Ehcache配置文件: ```xml <property name="hibernate.cache.use_second_level_cache">true <property name="hibernate.cache.region....
1. **全局共享**:所有Session都可以访问二级缓存中的数据,提高了效率。 2. **可配置性**:可以根据不同数据的访问模式和业务需求,为不同的实体和查询结果设置不同的缓存策略。 **使用注意事项** 1. **并发控制*...
2. 配置Hibernate:在hibernate.cfg.xml文件中启用二级缓存,并指定使用Ehcache作为二级缓存提供者。 3. 配置实体类:在实体类上使用`@Cacheable`、`@Cache`等注解,声明该类及属性参与缓存。 4. 配置缓存策略:...
在Hibernate配置中,你需要指定使用Ehcache作为二级缓存提供者。 5. **测试**:`testHibernateCache`这个文件可能包含了一个测试类,用于验证配置是否正确,缓存是否生效。测试通常会涉及创建、读取、更新和删除...
1. **导入依赖**:首先,你需要添加ehcache库的jar包到项目的类路径中,因为Hibernate通常使用ehcache作为默认的二级缓存提供者。 2. **配置二级缓存**:在`hibernate.cfg.xml`配置文件中,需要指定二级缓存的提供...
当对象在一级缓存中被修改并提交后,Hibernate会根据配置将这些变化同步到二级缓存中。这个过程包括了更新、删除和插入操作。值得注意的是,对于删除操作,Hibernate不仅会移除相应对象,还会清除可能存在的关联对象...
Ehcache二级缓存允许将一级缓存中的数据溢出到二级缓存,当一级缓存空间不足或者数据被移除时,可以从二级缓存中恢复。这不仅扩展了缓存容量,还确保了数据的持久性。 2. **POM文件**:在描述中提到的"POM"是Maven...
然后,我们需要在Hibernate的配置中启用二级缓存,并指定使用EhCache。在`hibernate.cfg.xml`文件中添加以下配置: ```xml <property name="hibernate.cache.use_second_level_cache">true <property name="...