EHCACHE技术详解

合集下载

ehcache 磁盘缓存 默认路径

ehcache 磁盘缓存 默认路径

ehcache 磁盘缓存默认路径摘要:1.介绍ehcache2.磁盘缓存的作用3.默认路径的设置4.总结正文:Ehcache 是一款非常流行的Java 缓存框架,它可以帮助我们有效地提高系统的性能和响应速度。

在Ehcache 中,磁盘缓存是一个非常重要的功能,它能够将缓存数据持久化到磁盘,从而在系统重启时能够快速地加载缓存数据。

而默认路径的设置则决定了磁盘缓存文件存储的位置。

首先,我们来了解一下Ehcache。

Ehcache 是一个开源的、可嵌入的、高性能的Java 缓存框架,它提供了多种缓存策略,如LRU(最近最少使用)、LFU(最不经常使用)等。

通过使用Ehcache,我们可以轻松地实现对数据的缓存,从而降低系统对数据库的访问次数,提高系统的性能。

接下来,我们来看一下磁盘缓存的作用。

在实际应用中,有时候我们需要将缓存数据持久化到磁盘,以便在系统重启时能够快速地加载缓存数据。

例如,当我们的系统需要运行一段时间后才能获取到完整的数据时,我们可以使用磁盘缓存将这些数据保存下来,以便下次运行时能够快速地加载。

这样,就可以避免重复计算或查询数据库,从而提高系统的响应速度。

然后,我们来看一下默认路径的设置。

默认情况下,Ehcache 会将磁盘缓存文件存储在项目的工作目录下。

但是,有时候我们需要将磁盘缓存文件存储在其他路径,以便更好地管理缓存文件。

这时,我们可以通过设置Ehcache 的配置文件来实现。

具体来说,我们可以在ehcache.xml 配置文件中设置`diskPersistent`和`diskExpiry`属性,从而指定磁盘缓存文件的存储路径和过期时间。

总结一下,Ehcache 是一款非常实用的Java 缓存框架,它可以帮助我们有效地提高系统的性能和响应速度。

在Ehcache 中,磁盘缓存是一个非常重要的功能,它能够将缓存数据持久化到磁盘,从而在系统重启时能够快速地加载缓存数据。

而默认路径的设置则决定了磁盘缓存文件存储的位置。

ehcache2.x分布式缓存原理

ehcache2.x分布式缓存原理

ehcache2.x分布式缓存原理Ehcache是一个流行的Java分布式缓存解决方案,其中2版本是其中一个常用的版本。

以下是Ehcache 2.x分布式缓存的简要原理说明:Ehcache 2.x分布式缓存采用了主从架构,其中一个节点作为主节点,其他节点作为从节点。

主节点负责缓存的读写和管理,而从节点负责缓存的存储和获取。

1. 初始化配置:通过Ehcache的配置文件,配置各个节点的角色、IP和端口等信息。

所有节点都需要加载相同的配置文件,以保持一致。

2. 数据传输:当主节点接收到一个写请求时,它首先将数据写入自己的缓存,然后将数据传输到所有的从节点。

传输过程可以通过多种方式实现,如使用网络传输或复制缓存文件。

3. 数据一致性:主节点在数据传输完成后,会等待所有从节点确认接收完成,确保数据的一致性。

一旦所有的从节点都已确认,主节点才会响应写请求成功。

4. 缓存访问:在读取缓存时,从节点会先查询自己的本地缓存。

如果找不到需要的数据,从节点会向主节点发起请求,获取数据并复制到自己的本地缓存。

5. 缓存失效:当缓存中的数据过期或被移除时,主节点会通知所有的从节点进行相应的缓存更新或清除操作。

通过上述的分布式缓存原理,Ehcache 2.x可以实现多个节点之间的缓存共享和数据一致性。

主节点负责协调和管理缓存的写操作,而从节点则负责缓存的存储和读取。

这种架构可以提升分布式系统的性能和可靠性,减轻了单个节点的负载压力,并保证了缓存数据的一致性。

需要注意的是,Ehcache 2.x是一个比较旧的版本,现在已经有了更高版本及其他更现代的分布式缓存解决方案。

在选择使用任何缓存解决方案之前,请根据实际需求和最新的技术趋势进行评估和选择。

ehcache缓存配置详解

ehcache缓存配置详解

一、设置diskstore,对所有的<cache/>和<defaultCache/>有效<!--设置缓存文件 .data 的创建路径。

如果该路径是 Java 系统参数,当前虚拟机会重新赋值,即获取该系统参数所代表的值。

下面的系统参数这样解释:user.home –用户主目录user.dir –用户当前工作目录 java.io.tmpdir--><diskStore path="java.io.tmpdir" />二、defaultCache :默认的管理策略,其配置用于被其它cache继承,包括被在代码中创建的cache继承。

三、缓存区使用<cache/>标签进行配置,主要属性以及意义如下:(1)name(必填属性):缓存区名称,用以区别缓存区,必须唯一。

(2)maxEntriesLocalHeap(必填属性):设置缓存在本地内存中最大(等效于旧版本中的maxElementsInMemory 缓存项数量(0表示无限)。

属性)。

在实际使用中,在非分布式部署条件下,无限等效于Integer.MAX_SIZE(2147483647)。

在分布式部署条件下,缓存项数量由Terracotta Server Array资源上限决定。

(3)maxEntriesLocalDisk(必填属性):设置保存在本地磁盘中的的最大缓存项数量。

默认为0,表示数量不限。

(4)eternal(必填属性):设置缓存项是否为永久的。

如果设置为true,缓存项的过期设置将被忽略,缓存项永不过期。

(5)overflowToOffHeap:此属性仅在使用Ehcache企业版时有效。

设置为true,缓存将使用非堆内存,非堆内存并非由Java管理,与Java 垃圾回收无关。

默认为false。

(6)maxBytesLocalHeap:定义保存在Java虚拟机堆内存中的缓存项的最大字节数。

ehcache缓存原理

ehcache缓存原理

ehcache缓存原理
Ehcache是一种基于Java的缓存框架,可以提供缓存服务,它的原理是将数据(对象)放入内存中存储,以提高系统的性能。

Ehcache 可以让应用程序更快地访问数据,而不必再从磁盘或数据库获取它。

Ehcache的核心是一种叫做“缓存”的技术,它将数据保存在快速访问的内存中,使其可以快速访问。

这种技术可以大大提高系统性能,并减少CPU和磁盘空间的使用率。

Ehcache使用一种叫做“淘汰”(eviction)的机制来管理它的缓存,也就是如果缓存中的数据量超过一定量,就会将相对不常访问的数据从缓存中移除掉。

这样可以节省很多内存,同时能够更快地访问缓存中的数据。

Ehcache还可以通过一种称为“缓存链接”(cache-chaining)的机制,来连接不同的缓存,以便在系统中存储更多的数据。

这样,当缓存中的数据超过一定量时,将自动向缓存链接中添加新的缓存,从而实现更好的数据存储空间。

Ehcache还支持持续性分区(persistent partitioning),这种技术可以将系统中的缓存数据分割成多个部分,每个部分存储的数据不会超过一定的大小,避免缓存溢出的现象。

另外,Ehcache还提供了一种称为“内存重用”(memory reclamation)的技术,目的是当系统中数据量变大时,可以释放系统中已经不再使用的缓存数据,以便用于存储新的数据。

总的来说,Ehcache的核心原理就是将系统中的数据存储在快速
访问的内存中,以提高系统的性能,同时也可以通过淘汰、缓存链接、持久性分区和内存重用等技术来管理Ehcache的缓存。

Ehcache的优势在于其可靠性高、支持多种数据格式以及用于整个系统的可扩展性。

EHCache详解_技术文档

EHCache详解_技术文档

目录0. 文档介绍 (2)0.1文档目的 (2)0.2文档范围 (2)0.3读者对象 (2)0.4参考文献 (2)0.5术语与缩写解释 (3)1.概述 (4)1.1背景 (4)1.2主要特征 (3)1.3环境 (5)1.4下载资源 (5)2. EHCACHE页面缓存的配置 (5)2.1EHC ACHE的类层次模型 (5)2.2环境搭建 (6)2.3 EHCACHE配置文件中元素说明................................................... 错误!未定义书签。

2.4在工程中单独使用...................................................................... 错误!未定义书签。

3. 在SPRING中运用EHCACHE ....................................................... 错误!未定义书签。

4. 分布式缓存集群环境配置 (19)4.1集群配置方式 (19)5. 测试用例 (28)0. 文档介绍0.1 文档目的记录使用EHCache实现页面级的缓存以及完成集群设计的过程。

0.2 文档范围记录使用EHCache实现页面级的缓存以及完成集群设计的过程。

0.3 读者对象任何有兴趣的家伙。

0.4 参考文献提示:列出本文档的所有参考文献(可以是非正式出版物),格式如下:[标识符] 作者,文献名称,出版单位(或归属单位),日期大部分都是网络上查询的资料,很多,不列举了。

0.5 术语与缩写解释1.概述1.1背景系统缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能. 缓存设想内存是有限的,缓存的时效性也是有限的,所以可以设定内存数量的大小,可以执行失效算法,可以在内存满了的时候,按照最少访问等算法将缓存直接移除或切换到硬盘上。

Java的进程内缓存框架:EhCache

Java的进程内缓存框架:EhCache

Java的进程内缓存框架:EhCacheEhCache 是⼀个纯Java的进程内缓存框架,具有快速、精⼲等特点,是Hibernate中默认的CacheProvider。

Ehcache缓存的特点:1. 快速.2. 简单.3. 多种缓存策略4. 缓存数据有两级:内存和磁盘,因此⽆需担⼼容量问题5. 缓存数据会在虚拟机重启的过程中写⼊磁盘6. 可以通过RMI、可插⼊API等⽅式进⾏分布式缓存7. 具有缓存和缓存管理器的侦听接⼝8. ⽀持多缓存管理器实例,以及⼀个实例的多个缓存区域9. 提供Hibernate的缓存实现Ehcache缓存的使⽤(1) – 安装ehcacheEhcache 的特点,是⼀个纯Java ,过程中(也可以理解成插⼊式)缓存实现,单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库⽅到classpath中。

如项⽬已安装了Hibernate ,则不需要做什么,直接可以使⽤Ehcache 。

Ehcache缓存的使⽤(2) - ⽣成CacheManager使⽤CacheManager 创建并管理Cache1.创建CacheManager有4种⽅式:A:使⽤默认配置⽂件创建Java代码1.CacheManager manager = CacheManager.create();B:使⽤指定配置⽂件创建Java代码1.CacheManager manager = CacheManager.create("src/config/ehcache.xml");C:从classpath中找寻配置⽂件并创建Java代码1.URL url = getClass().getResource("/anothername.xml");2.CacheManager manager = CacheManager.create(url);D:通过输⼊流创建Java代码1.InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath());2.try {3.manager = CacheManager.create(fis);4.} finally {5.fis.close();6.}Ehcache缓存的使⽤(3) – 解读Ehcache配置⽂件ehcache.xml重要的参数<diskStore path="D:/work2/renhewww/cache"/><cache name=" sampleCache1"maxElementsInMemory="1"maxElementsOnDisk="10000"eternal="false"overflowToDisk="true"diskSpoolBufferSizeMB="20"diskPersistent="true"timeToIdleSeconds="43200"timeToLiveSeconds="86400"memoryStoreEvictionPolicy="LFU"/>属性解释:必须属性:name:设置缓存的名称,⽤于标志缓存,惟⼀maxElementsInMemory:在内存中最⼤的对象数量maxElementsOnDisk:在DiskStore中的最⼤对象数量,如为0,则没有限制eternal:设置元素是否永久的,如果为永久,则timeout忽略overflowToDisk:是否当memory中的数量达到限制后,保存到Disk可选的属性:timeToIdleSeconds:设置元素过期前的空闲时间timeToLiveSeconds:设置元素过期前的活动时间diskPersistent:是否disk store在虚拟机启动时持久化。

Ehcache缓存框架详解

Ehcache缓存框架详解

Ehcache缓存框架详解一、前言ehcache是一个比较成熟的Java缓存框架,它提供了用内存,磁盘文件存储,以及分布式存储方式等多种灵活的cache管理方案。

ehcache最早从hibernate发展而来。

由于3.x的版本和2.x的版本API差异比较大。

这里直接学习最新版本的了,但是最后整合spring的时候还是有2.x。

二、安装由于我的项目是使用maven管理的,因此只要在pom文件中添加如下代码即可。

<dependency><groupId>javax.cache</groupId><artifactId>cache-api</artifactId><version>1.0.0</version></dependency><dependency><groupId>org.ehcache</groupId><artifactId>ehcache</artifactId><version>3.3.1</version></dependency>好像ehcache还要依赖上面的那个Cache,因此最好两个多加上。

三、使用1、快速入门__JA V A实现CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder() .withCache("preConfigured",CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(10))).build();cacheManager.init();Cache<Long, String> preConfigured =cacheManager.getCache("preConfigured", Long.class, String.class);Cache<Long, String> myCache = cacheManager.createCache("myCache",CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(10)));myCache.put(1L, "da one!");String value = myCache.get(1L);cacheManager.removeCache("preConfigured");cacheManager.close();这里使用的官网的例子。

ehcache 缓存参数 -回复

ehcache 缓存参数 -回复

ehcache 缓存参数-回复关于ehcache缓存参数的文章引言:在现代软件开发中,为了提高系统的性能和响应速度,应用程序经常会使用缓存来存储经常访问的数据。

ehcache是一个Java缓存库,它提供了丰富而强大的缓存功能。

本文将深入探讨ehcache缓存参数的相关知识,帮助读者了解如何优化和配置ehcache缓存以提高系统的性能。

第一部分:什么是ehcache缓存1.1 缓存的定义和作用缓存是一种将数据存储在临时存储器中的技术,以便可以快速地检索和更新数据。

它可以在磁盘或内存中存储数据,并可以根据需求设置缓存失效策略。

1.2 ehcache简介ehcache是一个广泛使用的Java缓存库,它提供了高性能、可扩展和可靠的缓存功能。

它可以与各种Java框架集成,如Spring、Hibernate等。

第二部分:ehcache缓存参数的配置2.1 缓存的初始化和配置要使用ehcache缓存,首先需要在应用程序中添加ehcache的依赖,并在项目的配置文件中进行相应的配置。

2.2 重要的ehcache缓存参数ehcache提供了一些重要的缓存参数,可以通过配置文件进行设置。

下面是其中一些常用参数的说明:- timeToIdleSeconds:设置对象在缓存中的空闲时间。

如果对象在指定的时间间隔内没有被访问,那么它将被从缓存中移除。

- timeToLiveSeconds:设置对象在缓存中的存活时间。

如果对象存活时间超过指定的时间间隔,那么它将被从缓存中移除。

- maxEntriesLocalHeap:在堆内存中存储的最大缓存对象数。

- maxEntriesLocalDisk:在磁盘中存储的最大缓存对象数。

- diskExpiryThreadIntervalSeconds:设置缓存失效检查线程的执行间隔时间。

2.3 缓存参数配置的注意事项在配置ehcache缓存参数时,需要注意以下几点:- 根据应用程序的需求合理设置缓存的空闲和存活时间,以免存储过期或无用的数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

import net.sf.ehcache.event.CacheEventListener;
import net.sf.ehcache.event.CacheEventListenerFactory; public class EhcacheListenerTest extends CacheEventListenerFactory { @Override
xsi:noNamespaceSchemaLocation="/ehcache.xsd">
2016-10-27 第 1页, 共 10页
<cache name="sampleCache1"
maxEntriesLocalHeap="10000" maxEntriesLocalDisk="1000" eternal="false" overflowToDisk="true" diskPersistent="true" diskSpoolBufferSizeMB="20" timeToIdleSeconds="300" timeToLiveSeconds="600"
2 部署
2.1 引入
官网地址:/ 下载发布包 ehcache-2.8.1-distribution.tar.gz并解压 1、 将lib下的jar包引入自己的工程 包括核心包:ehcache-2.8.1.jar,依赖jar包: slf4j-api-1.6.6.jar,slf4j-jdk14-1.6.6.jar 2、 将ehcache.xml放到src目录下。
props) {
public CacheEventListener createCacheEventListener(Properties
2016-10-27
第 4页, 共 10页
System.out.println("==create listener=="); for(Object key : props.keySet()) { } }
memoryStoreEvictionPolicy="LFU" transactionalMode="off">
diskExpiryThreadIntervalSeconds ="120" <cacheEventListenerFactory
class="com.ehcache.EhcacheListenerTest"
element) { }
public void notifyElementExpired(Ehcache ehcache, Element
System.out.println("==notifyElementExpired");
public void notifyElementPut(Ehcache ehcache, Element element) { } throws CacheException
public void notifyRemoveAll(Ehcache ehcache) { } } System.out.println("==notifyRemoveAll");
}
通过监听,在对cache做操作时,调用相应的监听类方法。
ehcache的基本用法就是这样。根据以上的基本用法,我们就更容易理解以下ehcache的一些 复杂应用。
public void dispose() System.out.println("==dispose");
element) { }
public void notifyElementEvicted(Ehcache ehcache, Element
System.out.println("==notifyElementEvicted");
转到磁盘时,会先将数据转入此缓存,然后由后台线程将数据从缓存中持久化到磁盘。
2016-10-27 第 2页, 共 10页
timeToIdleSeconds="300":表示缓存空闲300s后被销毁。 timeToLiveSeconds="600":表示缓存最长可以存在300s,然后被销毁。
Ehcache的三种清空策略, FIFO: 先进先出。 LFU: memoryStoreEvictionPolicy="LFU": 一直以来最少被使用的,即缓存的元素有一个hit属性,hit值最小的将会被清出缓存。LRU: 最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新 的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
</cache> </ehcache>
<persistence strategy="localTempSwap"/>
properties="wxwtestkey=200,wxtestkey2=300"/>
配置项详解:
<diskStore path="java.io.tmpdir"/>
此配置项配置的是,磁盘缓存的位置。其中java.io.tmpdir的具体位置可以由java代码, System.getProperty("java.io.tmpdir") 来查看。此处的path也可以配置成 user.home,user.dir 或用户设定的系统变量指定的路径。
System.out.println("==notifyElementPut");
element) { }
public void notifyElementRemoved(Ehcache ehcache, Element throws CacheException System.out.println("==notifyElementRemoved");
Element find = cache.get("key1"); 4、关闭mananger. manager.shutdown(); 另外,Ehcache还提供了监听的机制,在如上的配置文件中: <cacheEventListenerFactory class="com.ehcache.EhcacheListenerTest" properties="wxwtestkey=200,wxtestkey2=300"/>
其中class是自定义的实现类,继承CacheEventListenerFactory,覆盖 createCacheEventListener(Properties props)方法。EhcacheListenerTest代码 如下所示: package com.ehcache; import java.util.Properties; import net.sf.ehcache.CacheException; import net.sf.ehcache.Ehcache; import net.sf.ehcache.Element;
来指定路径。
2016-10-27 第 3页, 共 10页
CacheManager manager = CacheManager.create();
2、获取缓存区,根据ehcache.xml中配置的cache节点,指定name来获取cache. Cache cache = manager.getCache("sampleCache1"); 3、创建key-value形式的元素,存入缓存区,或从缓存区取出。 Element element = new Element("key1", "wxwtest"); cache.put(element);
Ehcache技术详解
1 基本概念
EHCache是一个快速的、 轻量级的、 易于使用的、 进程内的缓存。 它支持read-only和read/write 缓存,内存和磁盘缓存。是一个非常轻量级的缓存实现,而且从1.2 之后就支持了集群,目 前的最新版本是2.8。
1.1
主要特性
(1) 快速、简单 (2) 提供LRU、LFU和FIFO 缓存策略 (3) 缓存数据有两级:内存和磁盘,因此无需担心容量问题 (4) 缓存数据会在虚拟机重启的过程中写入磁盘 (5) 支持分布式缓存 (6) 支持多缓存管理器实例,以及一个实例的多个缓存区域
2.2
配置
ehcache.xml中的内容如下:
<?xml version="1.0" encoding="UTF-8"1/XMLSchema-instance" <diskStore path="java.io.tmpdir"/>
2016-10-27
第 6页, 共 10页
<persistence strategy="localTempSwap"/> </defaultCache> 3、 修改Mapper.xml,加上<cache 节点,例如: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-////DTD Mapper 3.0//EN" "/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.mybatis.dao.TestDAO"> <cache type="org.mybatis.caches.ehcache.EhcacheCache"/> <!—也可以是 <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>--> <resultMap id="BaseResultMap" …… </resultMap> <select id="getTestBean" resultMap="xxx" parameterType="java.util.Map"> …… </select> </mapper> 4、 mybatis默认是启用cache的,所以对于某一条不想被cache的sql需要把 useCache="false"加上。例如: <select id="getCategory" parameterType="string" resultType="xxx" useCache="false"> …… </select>
相关文档
最新文档