林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

摘要:本文主要介绍了EhCache,并通过整合Spring给出了一个使用实例。

一、EhCache 介绍

EhCache 是一个纯Java的进程内缓存框架,具有高速、精干等特点,是Hibernate中默认的CacheProvider。

Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储。缓存载入器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特点。

它的一个缺点就是使用磁盘Cache的时候非常占用磁盘空间,这源于DiskCache的算法简单,该算法简单也导致Cache的效率非常高。

它仅仅是对元素直接追加存储。

因此搜索元素的时候非常的快。假设使用DiskCache的。在非常频繁的应用中,非常快磁盘会满。
另外一个问题是当突然kill掉java的时候。不能保证数据的安全。可能是产生冲突,Ehcache的解决方法是假设文件冲突了,则重建cache。

这对于Cache数据须要保存的时候可能不利。

当然,Cache仅仅是简单的加速。而不能保证数据的安全。假设想保证数据的存储安全。能够使用Bekeley DB Java Edition版本号。这是个嵌入式数据库。

能够确保存储安全和空间的利用率。当然,还有非常多的Cache。

多数情况下,Ehcache能满足常见需求。

二、使用实例

本文要使用

1、引入jar包

     	<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>2.8.2</version>
</dependency>

2、在classpath下添加ehcache配置文件 ehcache.xml与配置文件

设置控制ehcache的bean。这部分的内容也能够直接写在spring的配置文件applicationContext.xml中去,这里为了方便管理,我给单独写出来了

beans-cache.xml

<?

xml version="1.0" encoding="UTF-8"?

>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cache="http://www.springframework.org/schema/cache"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd"> <cache:annotation-driven cache-manager="cacheManager" /> <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
<property name="cacheManager" ref="ehcache"></property>
</bean> <bean id="ehcache"
class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:beans/ehcache.xml"></property>
</bean> </beans>

ehcache.xml设置缓存大小和时间,缓存空间名等。

当中缓存空间可设置多个

<?xml version="1.0" encoding="UTF-8"?>
<ehcache updateCheck="false"> <diskStore path="java.io.tmpdir" /> <!-- DefaultCache setting. -->
<defaultCache eternal="false"
overflowToDisk="false"
diskPersistent="false"
timeToLiveSeconds="36000"
timeToIdleSeconds="36000"
maxElementsInMemory="10000"
memoryStoreEvictionPolicy="LRU"/> <!-- Special objects setting. -->
<!-- Refresh sysParamCache every hour. -->
<cache name="sysParamCache"
overflowToDisk="false"
eternal="false"
diskPersistent="false"
timeToLiveSeconds="36000"
timeToIdleSeconds="36000"
maxElementsInMemory="10000"
memoryStoreEvictionPolicy="LRU"/> </ehcache>

參数说明:
<diskStore>:

当内存缓存中对象数量超过maxElementsInMemory时,将缓存对象写到磁盘缓存中(需对象实现序列化接口)。
<diskStore path="">:

用来配置磁盘缓存使用的物理路径,Ehcache磁盘缓存使用的文件后缀名是*.data和*.index。
name:

缓存名称,cache的唯一标识(ehcache会把这个cache放到HashMap里)。

maxElementsOnDisk:

磁盘缓存中最多能够存放的元素数量,0表示无穷大。

maxElementsInMemory:

内存缓存中最多能够存放的元素数量,若放入Cache中的元素超过这个数值,则有下面两种情况。

1)若overflowToDisk=true,则会将Cache中多出的元素放入磁盘文件里。
2)若overflowToDisk=false,则依据memoryStoreEvictionPolicy策略替换Cache中原有的元素。

Eternal:

缓存中对象是否永久有效,即是否永驻内存,true时将忽略timeToIdleSeconds和timeToLiveSeconds。

timeToIdleSeconds:

缓存数据在失效前的同意闲置时间(单位:秒),仅当eternal=false时使用,默认值是0表示可闲置时间无穷大,此为可选属性即訪问这个cache中元素的最大间隔时间,若超过这个时间没有訪问此Cache中的某个元素,那么此元素将被从Cache中清除。

timeToLiveSeconds:

缓存数据在失效前的同意存活时间(单位:秒),仅当eternal=false时使用,默认值是0表示可存活时间无穷大,即Cache中的某元素从创建到清楚的生存时间,也就是说从创建開始计时,当超过这个时间时,此元素将从Cache中清除。
overflowToDisk:

内存不足时,是否启用磁盘缓存(即内存中对象数量达到maxElementsInMemory时,Ehcache会将对象写到磁盘中)。会依据标签中path值查找相应的属性值,写入磁盘的文件会放在path目录下,文件的名称是cache的名称,后缀名是data。

diskPersistent:

是否持久化磁盘缓存,当这个属性的值为true时,系统在初始化时会在磁盘中查找文件名称为cache名称,后缀名为index的文件,这个文件里存放了已经持久化在磁盘中的cache的index,找到后会把cache载入到内存,要想把cache真正持久化到磁盘,敲代码时注意执行net.sf.ehcache.Cache.put(Element element)后要调用flush()方法。
diskExpiryThreadIntervalSeconds:

磁盘缓存的清理线程执行间隔,默认是120秒。
diskSpoolBufferSizeMB:

设置DiskStore(磁盘缓存)的缓存区大小,默认是30MB
memoryStoreEvictionPolicy:

内存存储与释放策略,即达到maxElementsInMemory限制时,Ehcache会依据指定策略清理内存,共同拥有三种策略,分别为LRU(近期最少使用)、LFU(最经常使用的)、FIFO(先进先出)。

3.spring配置文件 applicationContext.xml 加入ehcache的配置

    <import resource="classpath:beans/beans-cache.xml" /> 

4.在service层添加注解配置

    @Override
@Cacheable(value="sysParamCache",key="#systemId+#merchantId+#businessType")// 使用了一个缓存名叫 accountCache
public SettUnit getSettUnitBySettUnitId(String systemId, String merchantId, String businessType) {

key=#systemId+#merchantId+#businessType" 对象缓存的key值,须要保证唯一, 用的是Spring的 SpEL表达式, 取值为 isbn对象的id属性值

value="sysParamCache":指的是ehcache.xml里的缓存名字

5、单元測试

    @Test
public void getSettUnitBySettUnitIdTest() {
String systemId = "CES";
String merchantId = "133";
SettUnit configSettUnit = settUnitService.getSettUnitBySettUnitId(systemId, merchantId, "ESP");
SettUnit configSettUnit1 = settUnitService.getSettUnitBySettUnitId(systemId, merchantId, "ESP");
boolean flag= (configSettUnit == configSettUnit1);
System.out.println(configSettUnit);
logger.info("查找结果" + configSettUnit.getBusinessType()); // localSecondFIFOCache.put("configSettUnit", configSettUnit.getBusinessType());
// String string = localSecondFIFOCache.get("configSettUnit");
// logger.info("查找结果" + string);
}

这是有缓存的结果,第二次直接从缓存中去取,比較两个的地址,相等即表明两上是同一个对象,第二次取的是第一次的结果

这是第一次取结果打印的SQL语句

Echache整合Spring缓存实例解说的更多相关文章

  1. Echache整合Spring缓存实例讲解(转)

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要介绍了EhCache,并通过整合Spring给出了一个使用实例. 一.EhCac ...

  2. Echache整合Spring缓存实例讲解

    摘要:本文主要介绍了EhCache,并通过整合Spring给出了一个使用实例. 一.EhCache 介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中 ...

  3. struts2整合spring应用实例

    我们知道struts1与spring整合是靠org.springframework.web.struts.DelegatingActionProxy来实现的,以下通过具体一个用户登录实现来说明stru ...

  4. Redis+Spring缓存实例

    转自:小宝鸽 一.Redis了解 1.1.Redis介绍: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).lis ...

  5. Redis+Spring缓存实例(windows环境,附实例源码及详解)

    原文出处: 小宝鸽 一.Redis了解 1.1.Redis介绍: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串). ...

  6. Spring+EhCache缓存实例(具体解说+源代码下载)

    一.ehcahe的介绍 EhCache 是一个纯Java的进程内缓存框架,具有高速.精干等特点,是Hibernate中默认的CacheProvider.Ehcache是一种广泛使用的开源Java分布式 ...

  7. Spring和ActiveMQ整合的完整实例

     Spring和ActiveMQ整合的完整实例 前言 这篇博文,我们基于Spring+JMS+ActiveMQ+Tomcat,做一个Spring4.1.0和ActiveMQ5.11.1整合实例,实现了 ...

  8. 以Spring整合EhCache为例从根本上了解Spring缓存这件事(转)

    前两节"Spring缓存抽象"和"基于注解驱动的缓存"是为了更加清晰的了解Spring缓存机制,整合任何一个缓存实现或者叫缓存供应商都应该了解并清楚前两节,如果 ...

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

    Ehcache 整合Spring 使用页面.对象缓存 Ehcache在很多项目中都出现过,用法也比较简单.一 般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布 ...

随机推荐

  1. 各种版本QT下载地址与VS2013+QT5.3.1环境搭建过程(转)

    原文转自 http://blog.csdn.net/baidu_34678439/article/details/54586058 1. 所有Qt版本下载地址: http://download.qt. ...

  2. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---32

    以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下:

  3. 常用公共DNS服务器地址

    DNS,全称Domain Name System,即域名解析系统,帮助用户在互联网上寻找路径,它在互联网的作用是把域名转换成为网络可以识别的IP地址.目前国内电信运营商通过使用DNS劫持和DNS污染的 ...

  4. Codeforces 899 C.Dividing the numbers-规律

      C. Dividing the numbers   time limit per test 1 second memory limit per test 256 megabytes input s ...

  5. TIOBE排行榜

    作者:码思客链接:https://zhuanlan.zhihu.com/p/37513668来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1 JAVA 毫无疑问的业界 ...

  6. SecureCRT使用Ctrl+D快速关闭Tab

  7. Move resources allocated using unmanaged interface to managed devm interface

    转载:http://blog.csdn.net/swingboard/article/details/27207497   So today let’s talk about devm functio ...

  8. 修改xampp默认sql密码

    1 登录localhost/phpmyadmin 点击权限修改 修改root@localhost下的密码并执行 2 刷新页面 找到xampp文件夹下的phpMyAdmin文件夹中的config.inc ...

  9. python的依赖性安全性检查

    1.safety 安装: pip install safety 使用: 检查整个系统的依赖包安全性safety check检查某个项目的依赖性安全safety check -r requirement ...

  10. 在Android上编译OSG[3.0.2 ] (转)

    在Android上编译OSG[3.0.2 ] 分类:Android   This file contents can be applied for version OpenSceneGraph(OSG ...