前几篇文章已经搭建了一个基本的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. eternal="false"                 // 元素是否永恒,如果是就永不过期(必须设置)
  6. maxEntriesLocalHeap="1000"      // 堆内存中最大缓存对象数,0没有限制(必须设置)
  7. overflowToDisk="false"          // 当缓存达到maxElementsInMemory值是,是否允许溢出到磁盘(必须设置)
  8. diskPersistent="false"          // 磁盘缓存在VM重新启动时是否保持(默认为false)
  9. timeToIdleSeconds="0"           // 导致元素过期的访问间隔(秒为单位). 当eternal为false时,这个属性才有效,0表示可以永远空闲,默认为0
  10. timeToLiveSeconds="600"         // 元素在缓存里存在的时间(秒为单位). 0 表示永远存在不过期
  11. memoryStoreEvictionPolicy="LFU" // 当达到maxElementsInMemory时,如何强制进行驱逐默认使用"最近使用(LRU)"策略,其它还有先入先出FIFO,最少使用LFU,较少使用LRU
  12. -->
  13. <defaultCache eternal="false" maxEntriesLocalHeap="0" timeToIdleSeconds="300" timeToLiveSeconds="300"/>
  14. <cache name="myCache" maxEntriesLocalHeap="1000" />
  15. </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缓存 - cache的更多相关文章

  1. springmvc缓存和mybatis缓存

    首先要有一个搭建好的ssm框架,笔者使用的是基于maven搭建的ssm框架. 加入springmvc缓存: 导入相关依赖包: <dependency> <groupId>org ...

  2. POCO库——Foundation组件之缓存Cache

    缓存Cache:内部提供多种缓存Cache机制,并对不同机制的管理缓存策略不同实现: ValidArgs.h :ValidArgs有效键参数类,模板参数实现,_key:键,_isValid:是否有效, ...

  3. [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能

    [.net 面向对象程序设计进阶] (15) 缓存(Cache)(二) 利用缓存提升程序性能 本节导读: 上节说了缓存是以空间来换取时间的技术,介绍了客户端缓存和两种常用服务器缓布,本节主要介绍一种. ...

  4. [.net 面向对象程序设计进阶] (14) 缓存(Cache) (一) 认识缓存技术

    [.net 面向对象程序设计进阶] (14) 缓存(Cache)(一) 认识缓存技术 本节导读: 缓存(Cache)是一种用空间换时间的技术,在.NET程序设计中合理利用,可以极大的提高程序的运行效率 ...

  5. .Net自带缓存Cache的使用

    对于数据比较大,经常要从数据库拿出来用的,可以考虑使用.Net自带的缓存Cache,简单好用: //向内存中插入一个缓存 System.Web.HttpRuntime.Cache.Insert(&qu ...

  6. 缓存Cache

    转载自  博客futan 这篇文章将全面介绍有关 缓存 ( 互动百科 | 维基百科 )cache以及利用PHP写缓存caching的技术. 什么是缓存Cache? 为什么人们要使用它? 缓存 Cach ...

  7. Java 中常用缓存Cache机制的实现

    所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. 所谓缓存,就是将程序或系统经常要调用的对象存在内存中 ...

  8. springMVC 缓存(入门 spring+mybaties+redis一)

    使用redis之前需要咋电脑上安装redis: 使用spring+mybaties+redis的本质是扩展类   org.apache.ibatis.cache.Cache:在我们自己扩展的Cache ...

  9. Java 中常用缓存Cache机制的实现《二》

    所谓缓存,就是将程序或系统经常要调用的对象存在内存中,一遍其使用时可以快速调用,不必再去创建新的重复的实例.这样做可以减少系统开销,提高系统效率. AD: Cache 所谓缓存,就是将程序或系统经常要 ...

随机推荐

  1. BZOJ 1954: Pku3764 The xor-longest Path(贪心+trie)

    传送门 解题思路 \(trie\)的一个比较经典的应用,首先把每个点到根的异或和算出,然后建一棵\(trie\)把所有权值插入到\(Trie\)中,之后枚举所有结点,在\(Trie\)上贪心的跑统计答 ...

  2. 使用Docker快速部署Gitlab

    使用Docker部署Gitlab 1. 下载gitlab镜像 docker pull gitlab/gitlab-ce 2. 运行gitlab实例 GITLAB_HOME=`pwd`/data/git ...

  3. python接口自动化测试三十四:github上某接口测试平台及配置

    TeserHome地址:https://testerhome.com/opensource_projects/60前端:https://github.com/pencil1/ApiTestWeb 实现 ...

  4. python3 装饰器修复技术@wraps到底是什么?

    Python 装饰器中的@wraps的作用:    装饰器的作用:    在不改变原有功能代码的基础上,添加额外的功能,如用户验证等    @wraps(view_func)的作用:     不改变使 ...

  5. upc组队赛16 GCDLCM 【Pollard_Rho大数质因数分解】

    GCDLCM 题目链接 题目描述 In FZU ACM team, BroterJ and Silchen are good friends, and they often play some int ...

  6. C# 生成小程序码

    /// <summary> /// B接口-微信小程序带参数二维码的生成 /// </summary> /// <param name="access_toke ...

  7. 哈希算法和字典类的定义,DataSet中数据遍历的几种方法

    哈希算法的基本操作: 1.  哈希表(HashTable)简述   在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似 ...

  8. npm安装报错:Error: EACCES: permission denied

    报错如下: sudo npm i webpack -g /Users/xesfe/.npm-global/bin/webpack -> /Users/xesfe/.npm-global/lib/ ...

  9. python文件的读写总结

    读写文件是最常见的IO操作.Python内置了读写文件的函数,用法和C是兼容的. 读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘, ...

  10. 棋盘问题(DFS)& Dungeon Master (BFS)

    1棋盘问题 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的 ...