`
星夜的遐想
  • 浏览: 190694 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Spring 与Ehcache实现基于方法的缓存

阅读更多

基于方法的缓存,顾名思义;

就是缓存的级别是在方法上,并且调用的方法的参数必须相同,那么直接从缓存中取数据,反之不取缓存中的数据。

最近查询了些资料,总结了下如何用Spring与Ehcache简单配置:

 

1、首先当然要配置ehcache的标准配置文件 ehcache.xml 

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"
    monitoring="autodetect">
    <diskStore path="D:/cachetmpdir"/>
    <defaultCache 
    	maxElementsInMemory="10000" 
    	eternal="false"
        timeToIdleSeconds="120"
		timeToLiveSeconds="120" 
		overflowToDisk="true"
        diskPersistent="false"
        diskExpiryThreadIntervalSeconds="120" 
        memoryStoreEvictionPolicy="LRU" />
        
    <cache name="userCache" 
    	    maxElementsInMemory="10000"
            eternal="false" 
            overflowToDisk="true"
            timeToIdleSeconds="300"
            timeToLiveSeconds="600"
            memoryStoreEvictionPolicy="LFU" />  
</ehcache>

    以上配置文件参数说明:

 

cache:每个需要配置的缓存节点
name:定义的缓存名字,在注解或配置文件中会引用到
maxElementsInMemory:内存中最大存储缓存的对象个数
eternal:设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断。 
timeToIdleSeconds: 对象空闲时间,指对象在多长时间没有被访问就会失效
timeToLiveSeconds: 对象存活时间,指对象从创建到失效所需要的时间
overflowToDisk:如果内存中数据超过内存限制,是否要缓存到磁盘上
diskPersistent: 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false
diskExpiryThreadIntervalSeconds:对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次
memoryStoreEvictionPolicy:如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU

 

   

 

    2、将Ehcache纳入Spring的beanFacory中,也就是spring的配置文件中配置缓存管理的相关类:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" 
	   xmlns:p="http://www.springframework.org/schema/p"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	   xmlns:context="http://www.springframework.org/schema/context" 
	   xmlns:aop="http://www.springframework.org/schema/aop" 
	   xmlns:cache="http://www.springframework.org/schema/cache"
xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd 
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd 
		   http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd"> 
  
  <!-- 启用缓存注解功能,这个是必须的,否则注解不会生效,另外,该注解一定要声明在spring主配置文件中才会生效 -->
  <cache:annotation-driven cache-manager="ehCacheManager"/>
  
	<!-- cacheManager工厂类,指定ehcache.xml的位置 -->
	<bean id="ehCacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
    p:configLocation="classpath:/config/ehcache.xml" />
    
	<!-- 声明ehCacheManager 其中类中的cacheManager属性为net.sf.ehcache.CacheManager因此必须引入ehcache-core.jar包-->
	<bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"
    p:cacheManager-ref="ehCacheManagerFactory" />

  <bean id="userDao" class="com.lyl.dao.impl.UserDaoImpl"></bean>

</beans>

 

  3、指定类的的方法上加入操作缓存的注解

       @Cacheable:负责将方法的返回值加入到缓存中
       @CacheEvict:负责清除缓存

 

 具体参数如下:

 

@Cacheable 支持如下几个参数:
value:缓存位置名称,不能为空,如果使用EHCache,就是ehcache.xml中声明的cache的name
key:缓存的key,默认为空,既表示使用方法的参数类型及参数值作为key,支持SpEL
condition:触发条件,只有满足条件的情况才会加入缓存,默认为空,既表示全部都加入缓存,支持SpEL

@CacheEvict 支持如下几个参数:
value:缓存位置名称,不能为空,同上
key:缓存的key,默认为空,同上
condition:触发条件,只有满足条件的情况才会清除缓存,默认为空,支持SpEL
allEntries:true表示清除value中的全部缓存,默认为false
 

 

//value 指定缓冲的名字,在文件配置的 key 为对应缓存的id
	@Cacheable(value="userCache",key="#uid + 'findById'")
	public User findUserById(String uid) {
		System.out.println("User findUserById("+uid+")");  
		return userMap.get(uid);
	}

	
	//将查询的所有用户加入userCache缓存
	@Cacheable(value="userCache")
	public List<User> findAllUsers() {
		List<User> userList=new ArrayList<User>();
		System.out.println("Execute:List<User> findAllUsers()");  
		Iterator<User> it=userMap.values().iterator();
		while(it.hasNext()){
			userList.add(it.next());
		}
		return userList;
	}

	//清除所有的缓存userCache所有的值
	@CacheEvict(value="userCache",allEntries=true)
	public void updateUser(User user) {
		System.out.println("Execute:updateUser(User user)");  
		userMap.put(user.getUid(), user);

	}
	
	//清除所有的缓存userCache所有的值
	@CacheEvict(value="userCache",allEntries=true)
	public void delUserbyUid(String uid){
		System.out.println("Execute: delUserbyId()");  
		userMap.remove(uid);
	}

 

  

 详细参考源码:

  

 

 

分享到:
评论

相关推荐

    spring + ehcache + redis两级缓存

    在缓存管理方面,Spring 提供了 Spring Cache抽象层,可以方便地集成各种缓存实现,如Ehcache、Hazelcast或Redis。 **Ehcache** 是一个广泛使用的Java缓存库,适合在内存中存储数据。它提供了一种快速访问最近使用...

    Spring4 整合EhCache实现 页面缓存 零配置

    在本文中,我们将深入探讨如何使用Spring4框架与EhCache进行整合,以实现零配置的页面缓存功能。EhCache是一个广泛使用的开源Java缓存解决方案,它提供了高效的内存和磁盘缓存机制,有助于提升应用程序性能。通过...

    SpringAOP结合ehCache实现简单缓存实例

    本文将深入探讨如何结合Spring AOP与EhCache实现一个简单的缓存实例,以便优化Java应用的运行效率。 首先,让我们了解Spring AOP。Spring AOP是Spring框架的一部分,它允许我们在不修改业务代码的情况下,通过定义...

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

    在本篇【Spring AOP+ehCache简单缓存系统解决方案】中,我们将探讨如何利用Spring AOP(面向切面编程)和ehCache框架来构建一个高效、简单的缓存系统,以提升应用程序的性能。ehCache是一款流行的开源Java缓存库,它...

    Spring+Ehcache集成

    本篇文章将详细介绍如何在Spring项目中集成Ehcache,以及如何通过Spring的AOP(面向切面编程)实现方法级别的缓存注解。 首先,我们需要在项目中引入Ehcache的依赖。通常,这可以通过在`pom.xml`文件中添加Maven...

    Spring+EhCache缓存实例

    **Spring+EhCache缓存实例详解** 在现代的Java企业级应用中,缓存技术扮演着至关重要的角色,它能够显著提升系统性能,减少数据库负载。Spring框架与EhCache的结合,为开发者提供了一种高效、易用的缓存解决方案。...

    Spring与ehcache结合使用

    本文将详细介绍如何在Spring框架中集成ehcache来实现本地缓存,从而提升应用的整体性能。 #### 二、ehcache简介 ehcache是一款开源的高性能Java本地缓存系统,它可以极大地减少数据库的访问次数,提高应用程序的...

    Ehcache 整合Spring 使用页面、对象缓存

    - **与Spring、Hibernate的集成**:Ehcache可以非常容易地与Spring和Hibernate框架集成,简化缓存的配置和使用。 #### 二、准备工作 在开始使用Ehcache之前,需要先完成以下准备工作: 1. **下载JAR包**: - **...

    spring+ehcache示例整合Demo

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

    Spring Boot中使用EhCache实现缓存支持

    Spring Boot 通过简单的配置即可启用EhCache缓存支持。 #### 配置EhCache 在Spring Boot中集成EhCache主要分为以下几个步骤: 1. **添加依赖** 在项目的`pom.xml`或`build.gradle`文件中添加EhCache的依赖: ...

    Ehcache分布式缓存与其在SpringBoot应用

    Ehcache是一个高性能的、基于Java的进程内缓存解决方案,它被广泛应用于各种Java应用程序,包括Java EE和轻量级容器。Ehcache的主要优势在于它的快速响应、易用性和丰富的缓存策略。它提供了两种级别的缓存存储:...

    SpringBoot 集成Ehcache实现缓存

    下面将详细介绍如何在一个Spring Boot项目中集成并使用Ehcache缓存。 ##### 1. 创建项目 首先,使用IDEA创建一个Maven类型的Spring Boot项目。确保项目结构符合Spring Boot的标准。 ##### 2. 数据库初始化 为了...

    spring-ehcache-redis两级缓存

    (见下图,为了减少get这几条网络传输,我们会在每个应用服务器上增加本地的ehcache缓存作为二级缓存,即第一次get到的数据存入ehcache,后面output输出即可从本地ehcache中获取,不用再访问redis了,所以就减少了...

    spring简单的缓存

    Spring提供了一种基于事件的更新策略,或者可以使用缓存 provider 提供的监听机制来实现。 7. **分布式缓存**: 在多节点环境中,通常需要使用分布式缓存,如Redis,来保证缓存的一致性和高可用性。Spring Data ...

    Ehcache整合Spring使用页面、对象缓存

    总结,Ehcache与Spring的整合使得在Web应用中实现高效、灵活的缓存策略成为可能。通过页面和对象级别的缓存,我们可以显著提高应用程序的性能,减少数据库交互,提升用户体验。同时,通过Spring的缓存抽象,可以方便...

    37. Spring Boot集成EHCache实现缓存机制【从零开始学Spring Boot】

    在本教程中,我们将深入探讨如何使用Spring Boot集成EHCache来实现高效的缓存机制。Spring Boot简化了配置过程,使得我们可以快速地将EHCache引入到我们的应用中,从而提高应用程序的性能,减少对数据库或其他资源的...

    spring整合EhCache 的简单例子

    EhCache 是一个开源、基于内存的Java缓存库,适用于快速、轻量级的数据存储。现在我们来详细探讨如何在Spring应用中集成EhCache以及相关知识点。 1. **EhCache简介** - EhCache 是一个广泛使用的Java缓存解决方案...

    spring+ehcache

    本文将深入探讨如何将Ehcache与Spring进行整合,以提高应用程序的性能和效率,主要基于提供的"spring+ehcache"入门级别的demo。我们将通过JUnit进行测试,确保整合过程正确无误。 **一、Spring与Ehcache的整合** 1...

    spring+ehcache demo

    总结,这个"spring+ehcache demo"是一个全面的示例,涵盖了从引入Ehcache依赖、配置Spring Cache到编写缓存注解的方法。通过学习和实践这个示例,开发者可以深入了解Spring与Ehcache的集成,以及如何利用缓存提升...

Global site tag (gtag.js) - Google Analytics