spring整合EhCache 缓存Dao
缓存的键的规则
1.spring中ehcache的配置:
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:ehcache.xml"/>
</bean>
<bean id="ehCache" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager" ref="cacheManager" />
<property name="cacheName" value="testCache" />
</bean>
<bean id="userDao" class="cn.demo.dao.impl.UserDaoImpl" parent="baseDao">
<property name="ehCache" ref="ehCache"></property>
</bean>
2.UserDaoImpl改成从缓存或者数据库中获取数据
public class UserDaoImpl extends BaseDao implements IUserDao {
Cache ehCache;
/**
* 该方法使用缓存
*/
public List<UserPO> selectList(UserPO parameter) {
Cache cache =(Cache)ehCache;
String className = this.getClass().getName();
String methodName = "selectList";
//缓存key的生成
//Object[] args = new Object[]{BeanMap.create(parameter).values()};
Collection args = BeanMap.create(parameter).values();
String cacheKey = CacheKey.getCacheKey(className, methodName, args);
//ValueWrapper val = cache.get(cacheKey);
Element val =cache.get(cacheKey);
if(val== null){
System.out.println("1.dao**********************");
List<UserPO> list =super.selectList("cn.demo.dao.IUserDao.queryUsers", parameter);
//cache.put(cacheKey, list);
Element ele = new Element(cacheKey, list);
cache.put(ele);
return list;
}
else{
System.out.println("2.cache######################");
return (List<UserPO>)val.getObjectValue();
}
}
public int insert(Object parameter) {
return insert("cn.demo.dao.IUserDao.insertUser", parameter);
}
public int count(UserPO user){
return this.selectOne("cn.demo.dao.IUserDao.count", user);
}
public List<UserPO> findUsersOfPage(UserPO user, RowBounds rowBounds){
return this.getSqlSessionTemplate().selectList("cn.demo.dao.IUserDao.findUsersOfPage", user, rowBounds);
}
public void setEhCache(Cache ehCache) {
this.ehCache = ehCache;
}
public Cache getEhCache() {
return ehCache;
}
}
3.缓存键的生成类
public class CacheKey {
public static String getCacheKey(String targetName, String methodName,
Collection arguments) {
String cacheName = targetName + "." + methodName + ".";
int hash = 0;
if ((arguments != null) && (arguments.size() != 0)) {
Iterator it = arguments.iterator();
Object o = null;
while (it.hasNext()) {
o=it.next();
if(o==null)
continue;
hash += o.hashCode();
}
}
cacheName = cacheName + hash;
return cacheName;
}
}
4.ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<!-- 默认的磁盘缓存目录 -->
<diskStore path="java.io.tmpdir"/>
<!-- EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再次查询数据库,大幅减轻数据库压力 -->
<!-- 默认缓存策略 -->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120" />
<cache name="testCache"
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"/>
</ehcache>
<!--
配置自定义缓存
maxElementsInMemory:缓存中允许创建的最大对象数
eternal:缓存中对象是否为永久的,如果是true,超时设置将被忽略,对象从不过期。
overflowToDisk:内存不足时,是否启用磁盘缓存。
timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,
两次访问时间的最大时间间隔值,这只能在元素不是永久驻留时有效,
如果该值是0,就意味着元素可以停顿无穷长的时间。
(即:设置缓存中的对象在过期之前的最大空闲时间,单位秒)
timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,
这只能在元素不是永久驻留时有效,如果该值是0,就意味着元素可以停顿无穷长的时间。
(即:设置缓存中的对象在过期之前的最大生存时间,单位秒)
memoryStoreEvictionPolicy:缓存满了之后的淘汰算法。共有三种:FIFO-先进先出,LFO-最少使用的出,LRO-最久没用的出。
-->
5.测试是否从缓存中获取数据
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:spring/*.xml"})
public class UserDaoEhCacheTest {
@Autowired
IUserDao userDao;
/*缓存dao*/
@Test
public void testUserDaoCache(){
for(int i=0;i<5;i++){
userDao();
}
}
private void userDao(){
UserPO po = new UserPO();
po.setUserName("xx");
List<UserPO> userList = userDao.selectList(po);
System.out.println(userList.size());
for(UserPO u: userList){
if(u.getUserId().startsWith("27"))
System.out.println(u.getUserId() + " "+u.getUserName());
}
}
/*
日志:第一次查询数据库,后面的查询的缓存
1.dao**********************
35
270 wangwu8
271 wangwu8
2.cache######################
35
270 wangwu8
271 wangwu8
2.cache######################
35
270 wangwu8
271 wangwu8
2.cache######################
35
270 wangwu8
271 wangwu8
2.cache######################
35
270 wangwu8
271 wangwu8
*/
}
相关推荐
Spring对ehCache的支持使得集成更加简便,我们可以利用Spring的缓存抽象来管理ehCache实例,包括设置缓存策略、大小限制等。 为了实现数据更新时的缓存刷新,我们可以利用Spring的事件驱动模型。当创建、更新或删除...
在这个"spring+ehcache示例整合Demo"中,我们将会探讨如何将Ehcache集成到Spring框架中,以实现高效的缓存管理。 首先,我们需要在项目的`pom.xml`文件中引入Ehcache和Spring的依赖。Ehcache通常使用的是`org....
在本文中,我们将深入探讨如何将Spring 2.5与Ehcache 2.0进行集成,以便在我们的应用程序中实现高效、可扩展的缓存管理。Ehcache是一款广泛使用的开源Java缓存解决方案,而Spring框架则为它提供了一个方便的集成层,...
总的来说,这个压缩包文件提供了一个基础的Java Web项目模板,展示了如何整合Maven、Spring、Spring MVC和Ehcache来实现一个具备缓存功能的Web应用。开发者可以通过学习和修改这个实例,加深对这些技术的理解并应用...
Spring 对 EhCache 的集成使得在 Spring 应用程序中使用缓存变得非常方便。通过 Spring 的配置,EhCache 可以被配置为自动管理缓存生命周期,包括缓存数据的加载、更新和过期策略。 在上述需求中,目标是缓存 ...
EHCache支持本地内存缓存、分布式缓存,并且可以与Spring无缝集成。在项目中添加EHCache的依赖,可以通过Maven或Gradle来完成,确保在pom.xml或build.gradle文件中包含对应的依赖项。 为了将EHCache与Spring集成,...
总的来说,"ehcache-spring-dao"示例是一个实用的学习资源,它展示了如何在Java应用中有效地整合缓存和数据访问,这对于提高应用性能和用户体验具有重大意义。学习并理解这个示例,可以帮助开发者更好地应对大数据量...
标题 "spring mybatis ehcache" 涉及到的是一个集成Spring、MyBatis和Ehcache的项目实例。这个项目结合了这三个重要的Java技术,为数据库操作提供了一个高效、可扩展的解决方案。 Spring是一个开源的Java应用框架,...
在这个例子中,我们将探讨如何在Spring环境中实现二级缓存,主要涉及Spring与Hibernate集成使用EhCache的情况。 一级缓存是ORM框架(如Hibernate)自身提供的缓存,它存储了最近查询的数据,减少了对数据库的直接...
在"Spring+Hibernate+ehcache整合"项目中,开发者已经完成了一个将这三个框架集成的基础工程。虽然Struts没有被明确提及,但通常在Web开发中,Spring与Struts结合可以构建更完整的MVC架构。这个整合项目可能包含以下...
本文将详细介绍如何在Spring3和Hibernate4环境下整合Ehcache,实现数据缓存功能,以提高应用性能。 1. **Spring3与Hibernate4整合** 在Spring3中配置Hibernate4,我们需要在配置文件中定义SessionFactory,并使用...
Spring Boot 简单使用 EhCache 缓存框架的方法 Spring Boot 是一个流行的 Java 框架,用于构建基于 Web 的应用程序。在 Spring Boot 应用程序中,缓存机制是非常重要的,因为它可以提高应用程序的性能和响应速度。...
这个"spring+ibatis+ehcache整合例子"是一个完整的示例项目,展示了如何将这三个框架无缝集成到一个基于MySQL数据库的应用中。下面将详细介绍这三个框架及其整合的关键点。 **Spring框架** Spring是一个全面的企业...
在Spring Boot的基础上,我们常常会整合其他技术,如Hibernate和Ehcache,来构建高效的数据存储和缓存解决方案。Maven作为Java项目的构建工具,负责管理项目的依赖关系。在这个源码包中,我们将探讨如何将这些组件...
在本文中,我们将深入探讨如何在Spring 3.2框架中使用Ehcache注解进行缓存管理。Ehcache是一种流行的Java缓存解决方案,它能够显著提高应用程序的性能,尤其是在处理频繁读取但更新不频繁的数据时。Spring 3.2引入了...
最后,可能还设置了Ehcache缓存策略,用于存储频繁访问的数据,提升性能。 总结来说,通过Spring Boot集成ActiveMQ、DataJPA和Ehcache,我们可以构建一个高效、响应快速的应用平台。ActiveMQ提供可靠的异步通信,...
《构建基于SpringBoot+Layui的学生管理系统:整合Shiro安全框架与Ehcache缓存》 在现代软件开发中,快速构建高效、稳定的Web应用是开发者的重要任务。本项目"基于SpringBoot+Layui搭建的学生管理系统",结合了Shiro...
在这个场景中,我们关注的是如何将Spring框架与JBPM(Business Process Management,业务流程管理)、日志记录、数据库以及ehcache缓存系统进行整合。这些组件在实际应用开发中扮演着至关重要的角色。下面将详细阐述...
5. **整合EhCache**:在Spring配置文件中启用缓存支持,并定义EhCache缓存配置,包括缓存名称、过期策略等。 6. **编写业务逻辑**:实现具体的Service层接口,使用@Autowired注解注入必要的Bean,如DAO层对象。 7....
在"struts1.x+spring+hibernate集成例子"中,我们首先会看到如何将这三个框架整合到一个项目中。Struts1.x 作为前端控制器,接收用户的HTTP请求,通过Action转发和配置文件(struts-config.xml)来决定业务流程。...