springmvc缓存

转载 2015年07月07日 15:55:19
前几篇文章已经搭建了一个基本的springmvc demo,现在我们来完善下。
    相信大家写程序的时候都接触过缓存的概念,也都知道,数据量大的时候缓存对于提高效率是很显著的。而缓存一般包括前台静态资源缓存和后台查询出来的数据缓存,这里介绍的是后者。最后感谢以下两篇文章,本文是在他们的基础上完成这个demo的。
http://my.oschina.net/duoduo3369/blog/173924
http://blog.csdn.net/jadyer/article/details/12257865
开始奉上代码。

    1.在springmvc的配置文件中加入缓存配置,代码如下:
  1. <!-- 缓存配置(两种) -->    
  2. <!-- 启用缓存注解功能(请将其配置在Spring主配置文件中) -->    
  3. <cache:annotation-driven cache-manager="cacheManager"/>    
  4. <!-- Spring自己的基于java.util.concurrent.ConcurrentHashMap实现的缓存管理器(该功能是从Spring3.1开始提供的) -->    
  5. <!--     
  6. <bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager">    
  7.     <property name="caches">    
  8.         <set>    
  9.             <bean name="myCache" class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean"/>    
  10.         </set>    
  11.     </property>    
  12. </bean>    
  13.  -->    
  14. <!-- 若只想使用Spring自身提供的缓存器,则注释掉下面的两个关于Ehcache配置的bean,并启用上面的SimpleCacheManager即可 -->    
  15. <!-- Spring提供的基于的Ehcache实现的缓存管理器 -->    
  16. <bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">    
  17.     <property name="configLocation" value="classpath:ehcache.xml"/>    
  18. </bean>    
  19. <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">    
  20.     <property name="cacheManager" ref="cacheManagerFactory"/>    
  21. </bean>   

        (注意不要忘记引入对应的命名空间)
        
    2.在配置路径下(这里是默认的src下)建立ehcache.xml文件,并配置程序的相关cache策略,代码如下:
    
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <ehcache dynamicConfig="false" monitoring="off" updateCheck="false"  
  3.          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd">  
  4.       
  5.     <!-- 定义缓存策略  
  6.         eternal="false"                 // 元素是否永恒,如果是就永不过期(必须设置)  
  7.         maxEntriesLocalHeap="1000"      // 堆内存中最大缓存对象数,0没有限制(必须设置)  
  8.         overflowToDisk="false"          // 当缓存达到maxElementsInMemory值是,是否允许溢出到磁盘(必须设置)  
  9.         diskPersistent="false"          // 磁盘缓存在VM重新启动时是否保持(默认为false)  
  10.         timeToIdleSeconds="0"           // 导致元素过期的访问间隔(秒为单位). 当eternal为false时,这个属性才有效,0表示可以永远空闲,默认为0  
  11.         timeToLiveSeconds="600"         // 元素在缓存里存在的时间(秒为单位). 0 表示永远存在不过期  
  12.         memoryStoreEvictionPolicy="LFU" // 当达到maxElementsInMemory时,如何强制进行驱逐默认使用"最近使用(LRU)"策略,其它还有先入先出FIFO,最少使用LFU,较少使用LRU  
  13.    -->  
  14.     <defaultCache eternal="false" maxEntriesLocalHeap="0" timeToIdleSeconds="300" timeToLiveSeconds="300"/>  
  15.     <cache name="myCache" maxEntriesLocalHeap="1000" />   
  16.      
  17. </ehcache>  

    3.既然是ehcache,肯定要引入ehcache的jar:ehcache-2.8.3,至于还需要什么jar,运行后就会发现。
    
    4.运行后报错,nested exception is java.lang.NoClassDefFoundError: org/aopalliance/intercept/MethodInterceptor   
    是因为缺少aopaliance-1.0 jar包,加入即可。
    
    5.后台service代码(我的注解是加在service的方法上的):
    
  1. //将查询到的数据缓存到myCache中,并使用方法名称加上参数中的userNo作为缓存的key    
  2. //通常更新操作只需刷新缓存中的某个值,所以为了准确的清除特定的缓存,故定义了这个唯一的key,从而不会影响其它缓存值    
  3. @Cacheable(value="myCache"key="#id")    
  4. public String getUsernameById(int id){    
  5.     System.out.println("调用了测试缓存的方法");   
  6.     System.out.println("数据库中查到此用户号[" + id + "]对应的用户名为[" + userMapper.getUsernameById(id) + "]");    
  7.     return userMapper.getUsernameById(id);    
  8. }  

    注意:springmvc有关缓存的注解主要是@Cacheable、@CachePut、@CacheEvict。关于这三个的详细使用可参考:http://my.oschina.net/duoduo3369/blog/173924
    

    6.第一次访问前台页面:


console后台有相关日志,日志如下:


     第二次执行,日志如下:


     程序没有执行我加了缓存注解的方法,后台没有日志,但是前台返回了数据,说明是从缓存里读取的数据,即缓存配置成功。

     over!

注:由于有网友找我要代码,我就把这篇博文涉及的代码还有前几篇博文的代码都上传到了CSDN上,地址是http://download.csdn.net/detail/tonytfjing/8302369  由于整理的比较仓促,有问题的地方欢迎大家下载探讨,谢谢!


springmvc缓存

前几篇文章已经搭建了一个基本的springmvc demo,现在我们来完善下。 相信大家写程序的时候都接触过缓存的概念,也都知道,数据量大的时候缓存对于提高效率是很显著的。而缓存一般包括前台静态资源缓...
  • tonytfjing
  • tonytfjing
  • 2014年09月13日 14:16
  • 29433

SpringMVC Ehcache的缓存实现

在互联网应用中,由于并发量比传统的企业级应用会高出很多,所以处理大并发的问题就显得尤为重要。在硬件资源一定的情况下,在软件层面上解决高并发问题会比较经济实惠一些。解决并发的根本在于提高系统的响应时间与...
  • u011257574
  • u011257574
  • 2016年02月23日 16:52
  • 2387

springMVC集成缓存框架Ehcache

Ehcache算是当前比较流行的缓存框架,使用缓存可以极大的缓解服务器和数据库的压力,提高访问效率,提高服务器的并发能力。接下来我们看怎么把缓存使用起来。 SpringMVC集成Ehcache所需的j...
  • qq_33556185
  • qq_33556185
  • 2016年06月15日 17:34
  • 7494

springMVC--页面缓存

页面缓存 简单理解缓存原理 互联网架构 页面缓存 使用Oscache实现页面缓存。 测试页面缓存 创建web工程,导入jar ...
  • CSDN_GIA
  • CSDN_GIA
  • 2017年02月13日 10:04
  • 844

Spring Web MVC框架(十) HTTP缓存

Spring的缓存控制类合理利用HTTP缓存,可以提高应用程序的性能。Spring当然也对HTTP缓存提供了支持。HTTP缓存最基础的类就是org.springframework.http.Cache...
  • u011054333
  • u011054333
  • 2017年02月14日 21:45
  • 1048

JDBC的一些通用封装+动态代理做缓存存取(自动解析返回的数据装载成实体类)

最近一个项目要用微服务改造,但是已有SQL很复杂感觉不适合用JPA,于是自己封装了下JDBC,以下代码也算是做下笔记吧。 PS:由于没有分页查询的需求所以没做分页功能。 public interf...
  • u012280292
  • u012280292
  • 2018年01月15日 14:48
  • 27

springmvc controller 面向切面编程,实现数据查询的缓存功能

面向切面编程的使用记录
  • u013627689
  • u013627689
  • 2017年11月24日 17:18
  • 101

springmvc配置Ehcache实现缓存管理

springmvc配置Ehcache实现缓存管理 项目源代码:http://download.csdn.net/detail/u013147600/9066943 工程介绍: springm...
  • u013147600
  • u013147600
  • 2015年08月31日 15:01
  • 4751

SpringMvc Ehcache 实现缓存机制

SpringMvc Ehcache 缓存 环境搭建 在前面的项目中用到的springMvc的maven拷贝过来,加入三个ehcache的包,分别是ehcache-core-2.5.2.ja...
  • u014201191
  • u014201191
  • 2015年06月13日 12:27
  • 3059

springmvc结合ehcache实现共享对象缓存

springmvc利用ehcache实现内存对象缓存
  • qwssd
  • qwssd
  • 2016年11月15日 17:49
  • 1226
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:springmvc缓存
举报原因:
原因补充:

(最多只允许输入30个字)