`

spring整合EhCache 缓存Dao

阅读更多

 

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 AOP+ehCache简单缓存系统解决方案

    Spring对ehCache的支持使得集成更加简便,我们可以利用Spring的缓存抽象来管理ehCache实例,包括设置缓存策略、大小限制等。 为了实现数据更新时的缓存刷新,我们可以利用Spring的事件驱动模型。当创建、更新或删除...

    spring+ehcache示例整合Demo

    在这个"spring+ehcache示例整合Demo"中,我们将会探讨如何将Ehcache集成到Spring框架中,以实现高效的缓存管理。 首先,我们需要在项目的`pom.xml`文件中引入Ehcache和Spring的依赖。Ehcache通常使用的是`org....

    spring2.5整合ehcache2.0使用

    在本文中,我们将深入探讨如何将Spring 2.5与Ehcache 2.0进行集成,以便在我们的应用程序中实现高效、可扩展的缓存管理。Ehcache是一款广泛使用的开源Java缓存解决方案,而Spring框架则为它提供了一个方便的集成层,...

    maven+spring+ehcache

    总的来说,这个压缩包文件提供了一个基础的Java Web项目模板,展示了如何整合Maven、Spring、Spring MVC和Ehcache来实现一个具备缓存功能的Web应用。开发者可以通过学习和修改这个实例,加深对这些技术的理解并应用...

    Spring AOP+ehCache简单缓存系统解决方案.doc

    Spring 对 EhCache 的集成使得在 Spring 应用程序中使用缓存变得非常方便。通过 Spring 的配置,EhCache 可以被配置为自动管理缓存生命周期,包括缓存数据的加载、更新和过期策略。 在上述需求中,目标是缓存 ...

    Spring中AOP实现EHCache的整合(一)

    EHCache支持本地内存缓存、分布式缓存,并且可以与Spring无缝集成。在项目中添加EHCache的依赖,可以通过Maven或Gradle来完成,确保在pom.xml或build.gradle文件中包含对应的依赖项。 为了将EHCache与Spring集成,...

    ehcache-spring-dao:spring dao ehcache 集成示例

    总的来说,"ehcache-spring-dao"示例是一个实用的学习资源,它展示了如何在Java应用中有效地整合缓存和数据访问,这对于提高应用性能和用户体验具有重大意义。学习并理解这个示例,可以帮助开发者更好地应对大数据量...

    spring mybatis ehcache

    标题 "spring mybatis ehcache" 涉及到的是一个集成Spring、MyBatis和Ehcache的项目实例。这个项目结合了这三个重要的Java技术,为数据库操作提供了一个高效、可扩展的解决方案。 Spring是一个开源的Java应用框架,...

    spring二级缓存

    在这个例子中,我们将探讨如何在Spring环境中实现二级缓存,主要涉及Spring与Hibernate集成使用EhCache的情况。 一级缓存是ORM框架(如Hibernate)自身提供的缓存,它存储了最近查询的数据,减少了对数据库的直接...

    Spring+Hibernate+ehcache整合

    在"Spring+Hibernate+ehcache整合"项目中,开发者已经完成了一个将这三个框架集成的基础工程。虽然Struts没有被明确提及,但通常在Web开发中,Spring与Struts结合可以构建更完整的MVC架构。这个整合项目可能包含以下...

    spring3 hibernate4 ehcache实例

    本文将详细介绍如何在Spring3和Hibernate4环境下整合Ehcache,实现数据缓存功能,以提高应用性能。 1. **Spring3与Hibernate4整合** 在Spring3中配置Hibernate4,我们需要在配置文件中定义SessionFactory,并使用...

    Spring Boot 简单使用EhCache缓存框架的方法

    Spring Boot 简单使用 EhCache 缓存框架的方法 Spring Boot 是一个流行的 Java 框架,用于构建基于 Web 的应用程序。在 Spring Boot 应用程序中,缓存机制是非常重要的,因为它可以提高应用程序的性能和响应速度。...

    spring+ibatis+ehcache整合例子

    这个"spring+ibatis+ehcache整合例子"是一个完整的示例项目,展示了如何将这三个框架无缝集成到一个基于MySQL数据库的应用中。下面将详细介绍这三个框架及其整合的关键点。 **Spring框架** Spring是一个全面的企业...

    Spring boot hibernate ehcache maven 整合源码

    在Spring Boot的基础上,我们常常会整合其他技术,如Hibernate和Ehcache,来构建高效的数据存储和缓存解决方案。Maven作为Java项目的构建工具,负责管理项目的依赖关系。在这个源码包中,我们将探讨如何将这些组件...

    spring3.2+ehcache 注解使用

    在本文中,我们将深入探讨如何在Spring 3.2框架中使用Ehcache注解进行缓存管理。Ehcache是一种流行的Java缓存解决方案,它能够显著提高应用程序的性能,尤其是在处理频繁读取但更新不频繁的数据时。Spring 3.2引入了...

    spring boot 集成activemq Datajpa Ehcache

    最后,可能还设置了Ehcache缓存策略,用于存储频繁访问的数据,提升性能。 总结来说,通过Spring Boot集成ActiveMQ、DataJPA和Ehcache,我们可以构建一个高效、响应快速的应用平台。ActiveMQ提供可靠的异步通信,...

    基于SpringBoot+Layui搭建的学生管理系统,融合shiro安全框架和Ehcache缓存框架.zip

    《构建基于SpringBoot+Layui的学生管理系统:整合Shiro安全框架与Ehcache缓存》 在现代软件开发中,快速构建高效、稳定的Web应用是开发者的重要任务。本项目"基于SpringBoot+Layui搭建的学生管理系统",结合了Shiro...

    Spring整合JBPM、日志、数据库、ehcache的配置文件

    在这个场景中,我们关注的是如何将Spring框架与JBPM(Business Process Management,业务流程管理)、日志记录、数据库以及ehcache缓存系统进行整合。这些组件在实际应用开发中扮演着至关重要的角色。下面将详细阐述...

    maven整合ssm框架+EhCache搭建(eclipse可直接运行).zip

    5. **整合EhCache**:在Spring配置文件中启用缓存支持,并定义EhCache缓存配置,包括缓存名称、过期策略等。 6. **编写业务逻辑**:实现具体的Service层接口,使用@Autowired注解注入必要的Bean,如DAO层对象。 7....

    struts1.x+spring+hibernate集成例子(包含所有jar包,ehcache二级缓存)

    在"struts1.x+spring+hibernate集成例子"中,我们首先会看到如何将这三个框架整合到一个项目中。Struts1.x 作为前端控制器,接收用户的HTTP请求,通过Action转发和配置文件(struts-config.xml)来决定业务流程。...

Global site tag (gtag.js) - Google Analytics