项目背景:
你可能遇情景:
1、一个做统计的页面,每次刷新需要调接口做查询 ,是联表查询,查出来的数据还需要做一些计算或者加工,不算页面上的图表插件,刷新一次,延迟个几秒钟才出的来
2、 一个统计接口如此,一个页面如果好几个统计的接口查询……
3、你有很多接口都要调用同一个方法,这个方法,正好又是耗时长的查询统计……
总之,慢就一个字

缓存可以解决,现在的缓存都已经很高明了,Redis这样的,以及数据库这样的不提,希望以后能遇到^-^
在此记录下这段时间用的spring集成的ehcache
第一步:配置spring的cacheManager

第二步:配置ehcache.xml

第三步:编写EhcacheUtil工具类
/**
 * Ecache工具类
 */
public class EhcacheUtil {
 

 private static final String path = "/ehcache/ehcache.xml"; 
 private URL url; 
 private CacheManager manager; 
 private static EhcacheUtil ehCache;

private EhcacheUtil(String path) { 
     url = getClass().getResource(path); 
     manager = CacheManager.create(url); 
 } 
 //静态工厂,第一次调用的时候实例化自己一遍
 public static EhcacheUtil getInstance() { 
     if (ehCache== null) { 
     ehCache= new EhcacheUtil(path); 
     }
     return ehCache; 
 }

//存入名为cacheName的缓存块,键值对为key-value
 public void put(String cacheName, String key, Object value) { 
     Cache cache = get(cacheName); 
     Element element = new Element(key, value); 
     cache.put(element); 
 }

//取出名为cacheName的缓存
public Cache get(String cacheName) { 
    return  manager.getCache(cacheName);
 }

//取
 public Object get(String cacheName, String key) { 
    return   get(cacheName).get(key).getObjectValue(); 
 }

//删
public void remove(String cacheName, String key) { 
      get(cacheName).remove(key);
 } 

}

这样你就可以手动控制你的缓存了
通常spring的做法是使用注解@Cached,标注这个注解的方法的返回值会被加入缓存,在下次调用的时候就可以直接从缓存中取
但是这样有个问题,这样缓存的数据需要某个机制不断去清空缓存,让新的缓存更新进来 
因此我使用一个定时任务,定时更新,尤其是统计类型的方法
所以下一篇,准备讲spring的定时任务

第二十一篇:spring怎么做缓存的更多相关文章

  1. Python开发【第二十一篇】:Web框架之Django【基础】

    Python开发[第二十一篇]:Web框架之Django[基础]   猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之 ...

  2. Python之路【第二十一篇】Django ORM详解

    ORM回顾 关系对象映射(Object Relational Mapping,简称ORM). django中遵循 Code Frist 的原则,即:根据代码中定义的类来自动生成数据库表. 对于ORM框 ...

  3. 【Python之路】第二十一篇--Memcached、Redis

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  4. Python之路【第二十一篇】:JS基础

    JavaScript的基础学习(一) 一.JavaScript概述 1.1 JavaScript的历史 ● 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在 ...

  5. Spring第十一篇——–Spring整合Hibernate之配置数据源

    DataSource(数据源)提供了一个标准化的取得数据库连接的方式,通过getConnection()方法即可取得数据库的连接,Spring也提供了数据库连接池(DataBase connectio ...

  6. Python之路(第二十一篇) re模块

    一.re模块 正则表达式本身是一种小型的.高度专业化的编程语言,正则表达式就是字符串的匹配规则,在多数编程语言里都有相应的支持,python里对应的模块是re,正则表达式模式被编译成一系列的字节码,然 ...

  7. SpringBoot非官方教程 | 第二十一篇: springboot集成JMS

    转载请标明出处: http://blog.csdn.net/forezp/article/details/71024024 本文出自方志朋的博客 springboot对JMS提供了很好的支持,对其做了 ...

  8. 第二十一篇 .NET高级技术之使用多线程(三)

    1.  单元模式和Windows Forms 单元模式线程是一个自动线程安全机制, 非常贴近于COM——Microsoft的遗留下的组件对象模型.尽管.NET最大地放弃摆脱了遗留下的模型,但很多时候它 ...

  9. SpringBoot第二十一篇:整合ActiveMQ

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11190048.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   前一章节中 ...

随机推荐

  1. 常用Jquery前端操作

    input只能输入正整数 onkeyup="this.value=this.value.replace(/\D/g,'')" if(!confirm("删除后无法恢复,确 ...

  2. delphi如何设计不规则窗体

    制作多边形窗体的关键在于设定多边形的区域,并根据这个指定的区域改变窗体的形状.Windows的CreatePolygonRgn和SetWindowRgn函数可以解决这两个难点.利用以下代码即可将窗体设 ...

  3. kafka拦截器原理|案例实操

    拦截器原理 Producer拦截器(interceptor)是在Kafka 0.10版本被引入的,主要用于实现clients端的定制化控制逻辑. 对于producer而言,interceptor使得用 ...

  4. Oracle sql判断一个字段是否全数字 或含有中文

    update (select length(t.name), t.* -- name,length(name) from g_enterprise_info t where nvl2(translat ...

  5. jQuery 基本使用

    index.html <head><meta http-equiv="Content-Type" content="text/html; charset ...

  6. function attributes, MDK

    The keyword format is either of the following: __attribute__((attribute1, attribute2, ...)) __attrib ...

  7. 初学hibernate的心得体会

    在初步学习了hibernate之后,使我明白了hibernate是一个怎样的软件.hibernate是一个比较独立的框架,它不需要太多其他软件的支持.hibernate是一个开放源代码的关系映射框架, ...

  8. assignment of day nine

    一.简述定义函数的三种方式 1.空函数:用于占位 2.有参函数:有参数的函数 3.无参函数:没有参数的函数 二.简述函数的返回值 1.如果函数没有返回值,默认返回None 2.函数可以通过return ...

  9. Spark RDD基本操作

  10. JS对象 JavaScript 中的所有事物都是对象,如:字符串、数值、数组、函数等,每个对象带有属性和方法。

    什么是对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方法: ...