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

转载 2015年10月23日 10:12:27

Ehcache在很多项目中都出现过,用法也比较简单。一般的加些配置就可以了,而且Ehcache可以对页面、对象、数据进行缓存,同时支持集群/分布式缓存。如果整合Spring、Hibernate也非常的简单,Spring对Ehcache的支持也非常好。EHCache支持内存和磁盘的缓存,支持LRU、LFU和FIFO多种淘汰算法,支持分布式的Cache,可以作为Hibernate的缓存插件。同时它也能提供基于Filter的Cache,该Filter可以缓存响应的内容并采用Gzip压缩提高响应速度。

一、准备工作

如果你的系统中已经成功加入Spring、Hibernate;那么你就可以进入下面Ehcache的准备工作。

1、 下载jar包

Ehcache 对象、数据缓存:http://ehcache.org/downloads/destination?name=ehcache-core-2.5.2-distribution.tar.gz&bucket=tcdistributions&file=ehcache-core-2.5.2-distribution.tar.gz

Web页面缓存:http://ehcache.org/downloads/destination?name=ehcache-web-2.0.4-distribution.tar.gz&bucket=tcdistributions&file=ehcache-web-2.0.4-distribution.tar.gz

2、 需要添加如下jar包到lib目录下

ehcache-core-2.5.2.jar

ehcache-web-2.0.4.jar 主要针对页面缓存

3、 当前工程的src目录中加入配置文件

ehcache.xml

ehcache.xsd

这些配置文件在ehcache-core这个jar包中可以找到

二、Ehcache基本用法

CacheManager cacheManager = CacheManager.create();
// 或者
cacheManager = CacheManager.getInstance();
// 或者
cacheManager = CacheManager.create(“/config/ehcache.xml”);
// 或者
cacheManager = CacheManager.create(“http://localhost:8080/test/ehcache.xml“);
cacheManager = CacheManager.newInstance(“/config/ehcache.xml”);
// …….

// 获取ehcache配置文件中的一个cache
Cache sample = cacheManager.getCache(“sample”);
// 获取页面缓存
BlockingCache cache = new BlockingCache(cacheManager.getEhcache(“SimplePageCachingFilter”));
// 添加数据到缓存中
Element element = new Element(“key”, “val”);
sample.put(element);
// 获取缓存中的对象,注意添加到cache中对象要序列化 实现Serializable接口
Element result = sample.get(“key”);
// 删除缓存
sample.remove(“key”);
sample.removeAll();

// 获取缓存管理器中的缓存配置名称
for (String cacheName : cacheManager.getCacheNames()) {
System.out.println(cacheName);
}
// 获取所有的缓存对象
for (Object key : cache.getKeys()) {
System.out.println(key);
}

// 得到缓存中的对象数
cache.getSize();
// 得到缓存对象占用内存的大小
cache.getMemoryStoreSize();
// 得到缓存读取的命中次数
cache.getStatistics().getCacheHits();
// 得到缓存读取的错失次数
cache.getStatistics().getCacheMisses();

三、页面缓存

页面缓存主要用Filter过滤器对请求的url进行过滤,如果该url在缓存中出现。那么页面数据就从缓存对象中获取,并以gzip压缩后返回。其速度是没有压缩缓存时速度的3-5倍,效率相当之高!其中页面缓存的过滤器有CachingFilter,一般要扩展filter或是自定义Filter都继承该CachingFilter。

CachingFilter功能可以对HTTP响应的内容进行缓存。这种方式缓存数据的粒度比较粗,例如缓存整张页面。它的优点是使用简单、效率高,缺点是不够灵活,可重用程度不高。

EHCache使用SimplePageCachingFilter类实现Filter缓存。该类继承自CachingFilter,有默认产生cache key的calculateKey()方法,该方法使用HTTP请求的URI和查询条件来组成key。也可以自己实现一个Filter,同样继承CachingFilter类,然后覆写calculateKey()方法,生成自定义的key。

CachingFilter输出的数据会根据浏览器发送的Accept-Encoding头信息进行Gzip压缩。

在使用Gzip压缩时,需注意两个问题:

  1. Filter在进行Gzip压缩时,采用系统默认编码,对于使用GBK编码的中文网页来说,需要将操作系统的语言设置为:zh_CN.GBK,否则会出现乱码的问题。

  2. 默认情况下CachingFilter会根据浏览器发送的请求头部所包含的Accept-Encoding参数值来判断是否进行Gzip压缩。虽然IE6/7浏览器是支持Gzip压缩的,但是在发送请求的时候却不带该参数。为了对IE6/7也能进行Gzip压缩,可以通过继承CachingFilter,实现自己的Filter,然后在具体的实现中覆写方法acceptsGzipEncoding。

具体实现参考:

protected boolean acceptsGzipEncoding(HttpServletRequest request) {

boolean ie6 = headerContains(request, “User-Agent”, “MSIE 6.0”);

boolean ie7 = headerContains(request, “User-Agent”, “MSIE 7.0”);

return acceptsEncoding(request, “gzip”) || ie6 || ie7;

}

在ehcache.xml中加入如下配置

Ehcache系列一:Ehcache 整合Spring 使用页面、对象缓存

出处:点击打开链接 Ehcache在很多项目中都出现过,用法也比较简单。一般的加些配置就可以了,而且Ehcache可以对页面、对象、数据进行缓存,同时支持集群/分布式缓存。如果整合Spring、H...
  • wabiaozia
  • wabiaozia
  • 2016年06月02日 09:49
  • 1791

Spring Boot整合Ehcache实现缓存功能

这里介绍Spring Boot结合JPA,MySQL和Ehcache实现缓存功能,提高程序访问效率。一、Maven依赖主要依赖如下所示: ...
  • Lammonpeter
  • Lammonpeter
  • 2017年11月22日 13:52
  • 387

Ehcache与Spring 使用页面、对象缓存

Ehcache 与 Spring 使用页面、对象缓存 Ehcache在很多项目中都出现过,用法也比较简单。一般的加些配置就可以了,而且Ehcache可以对页面、对象、数据进行缓存,同时支持集...
  • bestlove12345
  • bestlove12345
  • 2016年07月06日 09:40
  • 837

EhCache的使用及与Spring的整合

本文主要介绍EhCache的使用,以及EhCache与Spring的整合的实践经验。 EHCache API的基本用法 首先介绍CacheManager类。它主要负责读取配置文件,默认...
  • xiao_mengxi
  • xiao_mengxi
  • 2016年11月28日 09:55
  • 691

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

springmvc利用ehcache实现内存对象缓存
  • qwssd
  • qwssd
  • 2016年11月15日 17:49
  • 1224

以Spring整合EhCache为例从根本上了解Spring缓存这件事

前两节“Spring缓存抽象”和“基于注解驱动的缓存”是为了更加清晰的了解Spring缓存机制,整合任何一个缓存实现或者叫缓存供应商都应该了解并清楚前两节,如果只是为了快速的应用EhCache到Spr...
  • u012106290
  • u012106290
  • 2016年08月08日 18:04
  • 10006

Spring与ehcache整合,通过注解的方式使用缓存

Spring与ehcache
  • bestcxx
  • bestcxx
  • 2015年12月25日 10:34
  • 1363

spring+hibernate使用ehcache做缓存

一.  hibernate ehcache 二级缓存1.EhCache是什么    EhCache是Hibernate的二级缓存技术之一,可以把查询出来的数据存储在内存或者磁盘,节省下次同样查询语句再...
  • crow2738
  • crow2738
  • 2011年06月03日 15:02
  • 3782

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

Ehcache在很多项目中都出现过,用法也比较简单。一般的加些配置就可以了,而且Ehcache可以对页面、对象、数据进行缓存,同时支持集群/分布式缓存。如果整合Spring、Hibernate也非常的...
  • jeff06143132
  • jeff06143132
  • 2013年08月18日 23:35
  • 486

SpringBoot整合Ehcache

前言 近段时间在做一个类似cms的项目,在做完几十万的数据导入后,发现各种查询异常缓慢,数据库(单库,暂时服务器没那么多),数据库层面的索引各种优化前期也已经做过,单笔查询0.5s左右,但架不住量...
  • u014042066
  • u014042066
  • 2017年08月07日 21:17
  • 1694
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Ehcache 整合Spring 使用页面、对象缓存
举报原因:
原因补充:

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