ehcache缓存的详细配置
ehcache、memcache、redis三大缓存比较
ehcache、memcache、redis三⼤缓存⽐较最近项⽬组有⽤到这三个缓存,去各⾃的官⽅看了下,觉得还真的各有千秋!今天特意归纳下各个缓存的优缺点,仅供参考!Ehcache在项⽬⼴泛的使⽤。
它是⼀个开源的、设计于提⾼在数据从RDBMS中取出来的⾼花费、⾼延迟采取的⼀种缓存⽅案。
正因为Ehcache具有健壮性(基于java开发)、被认证(具有apache 2.0license)、充满特⾊(稍后会详细介绍),所以被⽤于⼤型复杂分布式web application的各个节点中。
什么特⾊?1. 够快Ehcache的发⾏有⼀段时长了,经过⼏年的努⼒和不计其数的性能,Ehcache终被设计于large, high concurrency systems.2. 够简单开发者提供的接⼝⾮常简单明了,从Ehcache的搭建到运⽤运⾏仅仅需要的是你宝贵的⼏分钟。
其实很多开发者都不知道⾃⼰⽤在⽤Ehcache,Ehcache被⼴泛的运⽤于其他的开源项⽬⽐如:3.够袖珍关于这点的特性,官⽅给了⼀个很可爱的名字small foot print ,⼀般Ehcache的发布版本不会到2M,V 2.2.3 才 668KB。
4. 够轻量核⼼程序仅仅依赖slf4j这⼀个包,没有之⼀!5.好扩展Ehcache提供了对的内存和硬盘的存储,最近版本允许多实例、保存对象⾼灵活性、提供LRU、LFU、FIFO淘汰,基础属性⽀持热配置、⽀持的插件多6.监听器缓存管理器监听器(CacheManagerListener)和缓存监听器(CacheEvenListener),做⼀些统计或数据⼀致性⼴播挺好⽤的如何使⽤?够简单就是Ehcache的⼀⼤特⾊,⾃然⽤起来just so easy!贴⼀段基本使⽤代码CacheManager manager = CacheManager.newInstance("src/config/ehcache.xml");Ehcache cache = new Cache("testCache", 5000, false, false, 5, 2);cacheManager.addCache(cache);name:缓存名称。
ehcache 磁盘缓存 默认路径
ehcache 磁盘缓存默认路径摘要:1.介绍ehcache2.磁盘缓存的作用3.默认路径的设置4.总结正文:Ehcache 是一款非常流行的Java 缓存框架,它可以帮助我们有效地提高系统的性能和响应速度。
在Ehcache 中,磁盘缓存是一个非常重要的功能,它能够将缓存数据持久化到磁盘,从而在系统重启时能够快速地加载缓存数据。
而默认路径的设置则决定了磁盘缓存文件存储的位置。
首先,我们来了解一下Ehcache。
Ehcache 是一个开源的、可嵌入的、高性能的Java 缓存框架,它提供了多种缓存策略,如LRU(最近最少使用)、LFU(最不经常使用)等。
通过使用Ehcache,我们可以轻松地实现对数据的缓存,从而降低系统对数据库的访问次数,提高系统的性能。
接下来,我们来看一下磁盘缓存的作用。
在实际应用中,有时候我们需要将缓存数据持久化到磁盘,以便在系统重启时能够快速地加载缓存数据。
例如,当我们的系统需要运行一段时间后才能获取到完整的数据时,我们可以使用磁盘缓存将这些数据保存下来,以便下次运行时能够快速地加载。
这样,就可以避免重复计算或查询数据库,从而提高系统的响应速度。
然后,我们来看一下默认路径的设置。
默认情况下,Ehcache 会将磁盘缓存文件存储在项目的工作目录下。
但是,有时候我们需要将磁盘缓存文件存储在其他路径,以便更好地管理缓存文件。
这时,我们可以通过设置Ehcache 的配置文件来实现。
具体来说,我们可以在ehcache.xml 配置文件中设置`diskPersistent`和`diskExpiry`属性,从而指定磁盘缓存文件的存储路径和过期时间。
总结一下,Ehcache 是一款非常实用的Java 缓存框架,它可以帮助我们有效地提高系统的性能和响应速度。
在Ehcache 中,磁盘缓存是一个非常重要的功能,它能够将缓存数据持久化到磁盘,从而在系统重启时能够快速地加载缓存数据。
而默认路径的设置则决定了磁盘缓存文件存储的位置。
ehcache让内容一直持久化在磁盘,防止异常丢失
ehcache让内容一直持久化在磁盘,防止异常丢失公司让做一个项目,客户提交一批100万的数据上来,程序异步保存提交上来的数据。
于是我把这100万数据缓存在ehcache 里,一开始,保存进去的数据只能读取一次,强行关闭tomcat ,再次读取,缓存的内容就丢失了。
经过多次测试发现,当调用 cache.getValue(key) 方法时,xxx.index 文件大小变为0了(我测试只有一条element,取一个即将全部取出,故为0),如果程序非正常关闭,那么xxx.index 文件就永久为0了,xxx.data 倒是还有内容。
如果程序正常退出(会触发ehcache 的 despose事件),则xxx.index 索引文件恢复原来的大小。
后来经过多次测试,发现,cache.flush() 也有效果,于是在每次cache.getValue(key)之后立马执行一下 cache.flush() ,这样ehcache 会将索引(xxx.index)回写到磁盘。
这样就不用担心程序是否非正常退出导致缓存丢失了。
附上配置文件:<?xml version="1.0" encoding="UTF-8"?><ehcache><diskStore path="mmsehcache" /><defaultCache maxElementsInMemory="10000" eternal="true" overflowToDisk="true" /><cachename="mms"maxElementsInMemory="0"eternal="true"overflowToDisk="true"diskPersistent="true"memoryStoreEvictionPolicy="LFU" ><cacheEventListenerFactoryclass="com.fractal.gateway.util.EhcacheListenerFactory" properties=""/><!--此为监听事件,可去掉--></cache></ehcache>。
SpringBoot项目中EhCache缓存技术的实现
SpringBoot项目中EhCache缓存技术的实现作者:王萍来源:《电脑知识与技术》2021年第29期摘要:从本质上看,EhCache是一个缓存管理器,不仅可以和Hibernate配合实现缓存,也可以和其他框架比如spring boot结合,作为一个缓存管理器,该文这里举一个例子,来论述SpringBoot项目中EhCache缓存技术的实现过程,以“spring boot + mybatis + EhCache”实现本地缓存为例,探讨了SpringBoot项目中EhCache缓存技术的实现。
关键词:SpringBoot项目;EhCache;缓存技术中图分类号:TP311 文献标识码:A文章编号:1009-3044(2021)29-0079-031概述1.1 SpringBootSpringBoot是由Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring应用的初始搭建以及开发过程。
该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
通过这种方式,SpringBoot在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
简而言之,SpringBoot是当前 web 开发主流,其简化了 Spring 的配置让开发者能够更容易上手Web项目的开发。
由于Spring 的发展、微服务的发展使得SpringBoot越来越流行,已经成为JavaWeb开发的主流框架。
1.2 Spring Boot的缓存机制SpringBoot高速缓存抽象不提供实际存储,且依赖于由org. springframework.cache.Cache 和org.springframework.cache.Cache⁃ Manager接口实现的抽象。
Spring Boot根据自动配置实现合适的CacheManager,只要缓存支持通过@EnableCaching 注释启用即可。
ehcache session缓存 清理机制
Ehcache的Session缓存清理机制主要依赖于缓存项的存活时间。
在Ehcache中,每个缓存项都有一个存活时间(time-to-live),当缓存项超过这个存活时间时,它就会被认为是过期的。
在默认情况下,Ehcache会每隔一段时间检查所有的缓存项是否过期,如果发现有过期的缓存项,就会进行清理。
这个时间间隔可以通过配置进行设置。
此外,Ehcache还提供了一个基于LRU(Least Recently Used)策略的缓存清理机制。
当缓存项达到存活时间上限时,Ehcache会将其从缓存中移除,然后将最近最少使用的缓存项移除。
这样可以保证缓存的空间不会被无限期地占用,而是能够根据需要动态地进行调整。
对于Session缓存,Ehcache提供了基于Slab的内存管理机制,每个Slab都有自己的存活时间和最大大小。
当一个Slab中的缓存项达到存活时间上限时,Ehcache会将其进行清理。
同时,Ehcache还提供了基于LRU策略的缓存清理机制,以保证Slab中的缓存项不会无限期地占用内存空间。
总之,Ehcache的Session缓存清理机制主要依赖于缓存项的存活时间和LRU策略,可以有效地管理缓存空间并保证缓存的可用性和性能。
关于ehcache 磁盘缓存 默认路径的文章
关于ehcache 磁盘缓存默认路径的文章ehcache是一个开源的Java缓存框架,它提供了内存缓存和磁盘缓存的功能。
在使用ehcache进行磁盘缓存时,默认路径是一个重要的配置项。
默认情况下,ehcache会将磁盘缓存存储在操作系统的临时目录中。
这个目录通常是由操作系统自动分配的,并且可能会在系统重启后被清空。
因此,如果我们希望持久化地保存磁盘缓存数据,就需要自定义默认路径。
为了修改默认路径,我们需要在ehcache的配置文件中进行相应的配置。
首先,我们需要找到ehcache.xml文件,这个文件通常位于项目的classpath下。
在该文件中,我们可以找到一个名为diskStore的配置项。
diskStore配置项用于指定磁盘缓存数据的存储路径。
默认情况下,它的值是\"java.io.tmpdir\",表示使用操作系统的临时目录作为默认路径。
如果我们希望修改默认路径,可以将diskStore配置项的值修改为我们期望的路径。
例如,假设我们希望将磁盘缓存数据保存在项目根目录下的一个名为\"cache\"的文件夹中。
那么我们可以将diskStore配置项修改如下:<diskStore path=\"cache\"/>这样一来,ehcache就会将磁盘缓存数据保存在项目根目录下的\"cache\"文件夹中。
需要注意的是,我们在修改默认路径时需要确保指定的路径是存在的,并且具有写入权限。
否则,ehcache将无法正常保存磁盘缓存数据。
除了在配置文件中进行配置外,我们还可以通过编程的方式来修改默认路径。
ehcache提供了一个名为DiskStorePathManager的类,通过该类可以动态地修改磁盘缓存数据的存储路径。
总之,ehcache提供了灵活的配置选项来修改磁盘缓存的默认路径。
通过合理地配置,默认路径可以被修改为我们期望的路径,从而实现对磁盘缓存数据的持久化保存。
EhCache缓存系统的使用
EhCache缓存系统的使用在Web开发中,缓存系统的应用能极大提高系统的响应速度,其中在Java应用中EhCache是比较常用的一个缓存框架。
EhCache是一个纯Jvm进程内的缓存框架,具有快速轻量、配置简单、功能强大等特点,是Hibernate中的默认CacheProvider。
下图是EhCache 的基本架构:EhCache的基本模块提供了缓存的实现,包括缓存管理器、多种的缓存策略、缓存的存储及相关扩展和控制接口,Replication模块提供了多种的分布式缓存的实现,两个APIs接口模块并且提供了基于J2EE技术相关的API。
EhCache的使用EhCache的基本包是ehcache-core-$ver.jar,依赖包是SLF4J,可以通过代码配置也可以使用配置文件,基本的元素有:CacheManager,缓存管理器,管理一组缓存的实例;Cache,一个缓存的实例,是缓存存放的地方,实现缓存存取接口;Element,单条缓存的组成单位,有Key、Value两部分,这两部分需要实现Serializeable接口。
基本使用代码如下:CacheManager manager = CacheManager.newInstance("src/config/ehcache.xml");manager.addCache("testCache");Cache test = manager .getCache("testCache");test.put(new Element("key1", "value1"));Element result = test.get(“key1”);test.remove(“key1”);使用Spring框架的时候可以使用IOC简化CacheManager的获取:@Autowiredprivate Cache sysSymbolCache;配置文件的使用介绍:<ehcache xmlns:xsi="/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="ehcache.xsd" updateCheck="true"monitoring="autodetect"><diskStore path="atoscache" /><defaultCache maxElementsInMemory="100000" eternal="false"timeToIdleSeconds="300" timeToLiveSeconds="720000" overflowToDisk="true"memoryStoreEvictionPolicy="LRU" /><cache name="sysSymbolCache" maxElementsInMemory="200000"eternal="false" overflowToDisk="true" diskPersistent="true" timeToIdleSeconds="216000"timeToLiveSeconds="720000"memoryStoreEvictionPolicy="LFU"></cache></ehcache>diskStore代表存储的目录名,默认是java.io.tmpdir,defaultCache是默认的Cache配置。
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背景系统缓存是位于应用程序与物理数据源之间,用于临时存放复制数据的内存区域,目的是为了减少应用程序对物理数据源访问的次数,从而提高应用程序的运行性能. 缓存设想内存是有限的,缓存的时效性也是有限的,所以可以设定内存数量的大小,可以执行失效算法,可以在内存满了的时候,按照最少访问等算法将缓存直接移除或切换到硬盘上。
ehcache简介
使用 Spring 的 AOP 进行整合,可以灵活的对方法的返回结果对象进行缓存。 CachingFilter 功能可以对 HTTP 响应的内容进行缓存。 1、主要特性 1. 快速. 2. 简单. 3. 多种缓存策略 4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 5. 缓存数据会在虚拟机重启的过程中写入磁盘 6. 可以通过 RMI、可插入 API 等方式进行分布式缓存 7. 具有缓存和缓存管理器的侦听接口 8. 支持多缓存管理器实例,以及一个实例的多个缓存区域 9. 提供 Hibernate 的缓存实现 10. 等等 2、配置文件介绍(普通缓存) Xml 代码 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. maxElementsInMemory:内存中最大缓存对象数 1/4 cache 元素的属性: name:缓存名称 <!-设定具体的命名缓存的数据过期策略 <!-- 设定缓存的默认数据过期策略 --> <defaultCache maxElementsInMemory="10000" eternal="false" overflowToDisk="true" timeToIdleSeconds="0" timeToLiveSeconds="0" diskPersistent="false" diskExpiryThreadIntervalSeconds="120"/> <ehcache> <!-- 指定一个文件目录,当 EHCache 把数据写到硬盘上时,将把数据写到这个文件目录下 --> <diskStore path="java.io.tmpdir"/>
ehcache 磁盘缓存 默认路径
ehcache 磁盘缓存默认路径Ehcache是一个Java的开源缓存框架,可以帮助开发人员实现快速的内存缓存和磁盘缓存。
在使用Ehcache进行磁盘缓存时,默认路径是在操作系统的临时目录下。
以下是有关Ehcache磁盘缓存默认路径的更多详细信息。
Ehcache的磁盘缓存默认路径是根据操作系统的不同而有所不同。
对于Windows系统来说,默认路径是在`C:\Documents andSettings\<用户名>\Local Settings\Temp\ehcache`目录下。
对于Linux系统来说,默认路径是在`/tmp/ehcache`目录下。
这个默认路径可以在Ehcache的配置文件中进行自定义设置。
如果没有特殊需求,一般情况下可以使用默认路径。
Ehcache磁盘缓存的默认路径是在临时文件夹中的一个单独的子目录中。
该子目录的命名规则是`ehcache<版本号>`,其中`<版本号>`是Ehcache的版本号。
例如,如果使用的是Ehcache 3.x版本,那么默认路径的子目录名就是`ehcache3`。
在Ehcache的磁盘缓存默认路径下,会生成一些特定格式的文件来存储缓存的数据。
这些文件的命名规则是基于所使用的缓存区域的名称。
每个缓存区域都会生成一个对应的文件,该文件的文件名就是缓存区域的名称。
例如,如果有一个缓存区域的名称为`myCache`,那么对应的文件名就是`myCache.data`。
除了缓存数据文件,还可能生成一些其他数据文件,比如索引文件等。
Ehcache提供了非常丰富的配置选项,允许开发人员根据实际需求来自定义磁盘缓存的路径。
在Ehcache的配置文件中,可以使用以下配置属性来指定磁盘缓存的路径:```<diskStore path="path/to/cache/directory" />```其中,`path`属性的值就是磁盘缓存的路径。
ehcache原理
ehcache原理Ehcache是一个开源的、高性能的Java缓存库,它可以被用于在Java应用程序中进行缓存数据以提高性能。
以下是Ehcache的原理。
1.缓存机制:Ehcache将数据存储在内存中,以提高访问速度。
它使用一个固定的内存空间作为缓存区域,当缓存被填满时,它会使用一种LRU(最近最少使用)策略来替换最旧的缓存项。
Ehcache还可以将缓存项存储在磁盘上,以便在应用程序重启时持久化缓存数据。
2.键值对存储:Ehcache使用键值对的方式存储缓存项。
每个缓存项都有一个唯一的键和一个对应的值。
通过键,应用程序可以在缓存中查找和访问相应的值。
3.缓存策略:Ehcache提供了多种缓存策略来满足不同的需求。
例如,可以通过设置缓存的存活时间来控制缓存项的有效期,一旦超过了指定的时间,缓存项将会过期并被移出缓存区域。
此外,Ehcache还支持基于空间大小的缓存策略,通过设置缓存的最大容量,可以限制缓存中存储的缓存项数量,以防止缓存过度填充。
4.缓存失效:Ehcache提供了多种缓存失效的方式。
除了根据时间或空间来失效缓存项之外,Ehcache还支持手动失效缓存项,即应用程序可以通过指定键来从缓存中移除特定的缓存项。
5.缓存管理:Ehcache允许应用程序对缓存进行管理和配置。
可以通过配置文件或程序代码来设置缓存的属性,例如存活时间、最大容量等。
Ehcache还提供了监控和统计功能,以便了解缓存的使用情况和性能。
6.缓存同步:Ehcache支持多线程环境下的缓存同步。
当多个线程同时访问同一个缓存项时,Ehcache会通过锁机制来确保只有一个线程更新缓存数据。
其他线程将等待更新完成后再获取数据,以保证数据的一致性。
7.分布式缓存:Ehcache还支持分布式缓存,在集群环境下可以将缓存数据存储在多个节点上。
Ehcache使用RMI机制来实现节点之间的通信和缓存数据的同步。
分布式缓存可以提高应用程序的可伸缩性和容错性。
ehcache value类型
ehcache value类型一、什么是ehcache value类型?Ehcache是一个开源的Java缓存框架,可以在应用程序中实现高效的缓存管理。
Ehcache的value类型指的是缓存在Ehcache中存储的数据对象。
Ehcache支持多种数据类型的缓存,包括Java基本数据类型、自定义对象、集合等。
二、Java基本数据类型的缓存Ehcache可以直接缓存Java的基本数据类型,例如整型、浮点型、布尔型等。
缓存这些数据类型可以有效地提高应用程序的性能,避免频繁的计算和查询操作。
例如,在一个商品清单的应用中,可以缓存每个商品的价格、库存等基本数据类型,以减少对数据库的访问。
三、自定义对象的缓存Ehcache可以缓存自定义的Java对象,通过实现Serializable接口来实现对象的序列化和反序列化。
自定义对象可以包含多个属性,例如用户信息、订单信息等。
在缓存中存储自定义对象可以减少对数据库的查询次数,提高应用程序的性能。
同时,Ehcache还提供了强大的配置选项,可以设置对象的生命周期、失效时间等。
四、集合的缓存Ehcache还支持对Java集合对象的缓存,包括List、Set、Map等。
集合对象在应用程序中常用于存储和管理多个数据元素。
通过将集合对象缓存到Ehcache中,可以避免重复的查询和计算操作,提高应用程序的效率。
例如,在一个新闻列表的应用中,可以将每页的新闻数据缓存到Ehcache 中,减少对数据库的访问。
五、如何选择适合的value类型?在选择Ehcache的value类型时,需要考虑以下几个方面:1. 数据类型:根据实际需求选择合适的数据类型。
如果只需缓存基本数据类型,可以选择直接缓存基本数据类型。
如果需要缓存的是自定义对象或集合对象,需要实现Serializable接口。
2. 数据规模:根据数据规模选择适当的数据结构。
如果数据规模较小,可以选择使用Java基本数据类型进行存储。
jpa二级缓存设置专业资料
共 12 页
第 2 页
sheagle@
ehcache 缓存设置
缓存的软件实现 在 Hibernate 的 Session 的实现中包含了缓存的实现 由第三方提供, Hibernate 仅提供了缓存适配器(CacheProvider)。 用于把特定的缓存插件集成到 Hibernate 中。 启用缓存的方式 只要应用程序通过 Session 接口来执行保存、更新、删除、加载和查 询数据库数据的操作,Hibernate 就会启用第一级缓存,把数据库中的数据以对象的形式拷 贝到缓存中,对于批量更新和批量删除操作,如果不希望启用第一级缓存,可以绕过 Hibernate API,直接通过 JDBC API 来执行指操作。 用户可以在单个类或类的单个集合的 粒度上配置第二级缓存。 如果类的实例被经常读但很少被修改, 就可以考虑使用第二级缓存。 只有为某个类或集合配置了第二级 缓存,Hibernate 在运行时才会把它的实例加入到第二 级缓存中。 用户管理缓存的方式 第一级缓存的物理介质为内存,由于内存容量有限,必须通过恰 当的检索策略和检索方式来限制加载对象的数目。 Session 的 evit()方法可以显式清空缓存 中特定对象,但这种方法不值得推荐。 第二级缓存的物理介质可以是内存和硬盘,因此第 二级缓存可以存放大量的数据, 数据过期策略的 maxElementsInMemory 属性值可以控制内存 中 的对象数目。管理第二级缓存主要包括两个方面:选择需要使用第二级缓存的持久类, 设置合适的并发访问策略:选择缓存适配器,设置合适的数据过期策略。
2.3.5 配置二级缓存的主要步骤: 1) 选择需要使用二级缓存的持久化类,设置它的命名缓存的并发访问策略。这是最值 得认真考虑的步骤。 2) 选择合适的缓存插件,然后编辑该插件的配置文件。
ehcache 磁盘缓存 默认路径
ehcache 磁盘缓存默认路径【实用版】目录1.Ehcache 简介2.磁盘缓存的作用和默认路径3.Ehcache 磁盘缓存的配置4.Ehcache 磁盘缓存的优缺点正文【Ehcache 简介】Ehcache 是一款开源的 Java 缓存框架,它可以用来存储和管理数据,以提高应用程序的运行速度。
Ehcache 支持多种缓存策略和数据存储方式,如内存缓存、磁盘缓存、分布式缓存等。
【磁盘缓存的作用和默认路径】磁盘缓存是 Ehcache 提供的一种数据存储方式,主要用于存储那些不太经常访问的数据。
当内存缓存空间不足时,Ehcache 会将部分数据转移到磁盘缓存中。
磁盘缓存的默认路径是 Java 虚拟机的用户目录下的.ehcache 文件夹。
【Ehcache 磁盘缓存的配置】Ehcache 磁盘缓存的配置可以通过 xml 配置文件或者 Java 代码进行。
在 xml 配置文件中,可以通过设置 diskStore、diskSpoolBufferSize、maxElementsInMemory 等参数来调整磁盘缓存的相关属性。
在 Java 代码中,可以通过 Ehcache 的 API 来进行配置。
【Ehcache 磁盘缓存的优缺点】Ehcache 磁盘缓存的优点是可以大大提高数据存储的容量,从而支持更多的数据缓存。
同时,磁盘缓存也可以作为内存缓存的备份,当内存缓存出现故障时,磁盘缓存可以接管数据缓存任务。
然而,Ehcache 磁盘缓存也存在一些缺点。
首先,磁盘缓存的访问速度相对较慢,因为磁盘读写速度远远低于内存读写速度。
ehcache 缓存参数
ehcache 缓存参数Ehcache 是一个快速、开源、Java 缓存框架,用于提高应用程序的性能和扩展性。
它提供了许多用于配置和优化缓存的参数。
在本文中,我们将深入研究Ehcache 缓存参数,了解它们的作用和如何配置它们以达到最佳性能。
1. 最大缓存元素数量(maxEntries)maxEntries 参数用于设置缓存最多可以容纳的元素数量。
当缓存中的元素数量达到此值时,便会触发缓存淘汰策略,以释放空间存储新的元素。
配置此参数时,需要根据应用程序的内存使用情况和硬件资源来决定。
2. 缓存过期时间(timeToLiveSeconds 和 timeToIdleSeconds)使用 timeToLiveSeconds 参数可以设置缓存元素的全局过期时间。
一旦设置的时间到达,缓存中所有的元素将被清除。
timeToIdleSeconds 参数用于设置元素的闲置时间,默认情况下,元素不会因为闲置而过期,只有在访问时才会更新其闲置时间。
根据应用程序的业务需求,可以根据元素的特性来配置这两个参数。
3. 内存存储策略(memoryStoreEvictionPolicy)Ehcache 提供了多种内存存储策略,用于确定在缓存空间不足时如何选择要移除的元素。
其中包括 LRU(最近最少使用)、LFU(最不常用)和FIFO(先进先出)等。
选择合适的存储策略很重要,因为它直接影响了缓存的性能和存储效率。
4. 磁盘存储策略(overflowToDisk 和 maxEntriesLocalDisk)如果缓存元素的数量超过了内存容量的限制,那么 Ehcache 将使用磁盘存储策略来保存溢出的元素。
可以通过设置overflowToDisk 参数为true 来启用磁盘存储。
为了控制缓存使用的磁盘空间,可以使用 maxEntriesLocalDisk 参数设置最大磁盘存储元素的数量。
5. 堆外缓存(offheap)Ehcache 还提供了堆外缓存的支持。
使用ehcahe提高网站性能
使用EHCache提升网站性能文章分类:Java编程这是一篇很早以前写得文章,整理了一下贴上来,希望对不熟悉EHcache的同学有用。
在开发高并发量,高性能的网站应用系统时,缓存Cache起到了非常重要的作用。
本文主要介绍EHCache的使用,以及使用EHCache的实践经验。
笔者使用过多种基于Java的开源Cache组件,其中包括OSCache、JBossCache、EHCache。
OSCache功能强大,使用灵活,可用于对象缓存、Filter缓存以及在JSP中直接使用cache标签。
笔者在最近的使用过程中发现,在并发量较高时,OSCache会出现线程阻塞和数据错误,通过分析源代码发现是其内部实现的缺陷。
JBossCache最大的优点是支持基于对象属性的集群同步,不过JBossCache的配置使用都较复杂,在并发量较高的情况下,对象属性数据在集群中同步也会加大系统的开销。
以上两种Cache本文仅作简单介绍,不做深入探讨。
EHCache是来自sourceforge(/)的开源项目,也是纯Java 实现的简单、快速的Cache组件。
EHCache支持内存和磁盘的缓存,支持LRU、LFU和FIFO 多种淘汰算法,支持分布式的Cache,可以作为Hibernate的缓存插件。
同时它也能提供基于Filter的Cache,该Filter可以缓存响应的内容并采用Gzip压缩提高响应速度。
EHCache API的基本用法首先介绍CacheManager类。
它主要负责读取配置文件,默认读取CLASSPATH下的ehcache.xml,根据配置文件创建并管理Cache对象。
// 使用默认配置文件创建CacheManagerCacheManager manager = CacheManager.create();// 通过manager可以生成指定名称的Cache对象Cache cache = cache = manager.getCache("demoCache");// 使用manager移除指定名称的Cache对象manager.removeCache("demoCache");可以通过调用manager.removalAll()来移除所有的Cache。
springbootehcache配置使用方法代码详解
springbootehcache配置使⽤⽅法代码详解EhCache是⼀个⽐较成熟的Java缓存框架,最早从hibernate发展⽽来,是进程中的缓存系统,它提供了⽤内存,磁盘⽂件存储,以及分布式存储⽅式等多种灵活的cache管理⽅案,快速简单。
Springboot对ehcache的使⽤⾮常⽀持,所以在Springboot中只需做些配置就可使⽤,且使⽤⽅式也简易。
下⾯通过本⽂给⼤家介绍springboot ehcache 配置使⽤⽅法,具体内容如下所⽰:1. pom 引⼊依赖<!-- Ehcache --><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId></dependency>2.resources ⽬录下直接放个⽂件ehcache.xml<ehcache xmlns:xsi="/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="/ehcache.xsd"updateCheck="false"><diskStore path="java.io.tmpdir"/><!--defaultCache:echcache的默认缓存策略 --><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"maxElementsOnDisk="10000000"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"><persistence strategy="localTempSwap"/></defaultCache><!-- 菜单缓存策略 --><cache name="menucache"maxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"maxElementsOnDisk="10000000"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"><persistence strategy="localTempSwap"/></cache></ehcache>3.在Service层⽅法上加上注解@CacheEvict(value="menucache", allEntries=true) ,更新缓存@Cacheable(key="'menu-'+#parentId",value="menucache") 读取缓存,"'menu-'+#parentId" 通配符,也可以直接写死字符串menucache 对应上⾯ xmlname="menucache"/**删除菜单* @param MENU_ID* @*/@CacheEvict(value="menucache", allEntries=true)public void deleteMenuById(String MENU_ID) throws Exception{this.cleanRedis();menuMapper.deleteMenuById(MENU_ID);}/*** 通过ID获取其⼦⼀级菜单* @param parentId* @return* @*/@Cacheable(key="'menu-'+#parentId",value="menucache")public List<Menu> listSubMenuByParentId(String parentId) throws Exception {return menuMapper.listSubMenuByParentId(parentId);}到此这篇关于springboot ehcache 配置使⽤⽅法代码详解的⽂章就介绍到这了,更多相关springboot ehcache 配置使⽤内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!。
ehcache3 持久化规则
ehcache3 持久化规则ehcache3是一个流行的Java缓存框架,它提供了一种将数据存储在内存中的方式,以加快应用程序的性能。
然而,由于内存有限,数据在应用程序重启后将丢失。
为了解决这个问题,ehcache3提供了持久化功能,允许将缓存数据存储到磁盘上,以便在应用程序重启后能够恢复数据。
使用ehcache3的持久化功能非常简单。
首先,需要配置一个持久化存储区,这可以是文件系统、数据库或其他支持的存储方式。
然后,将持久化存储区配置到ehcache3的配置文件中。
一旦配置完成,ehcache3将自动将缓存数据写入持久化存储区,并在应用程序重启后将数据读取回来。
ehcache3的持久化规则非常灵活,可以根据应用程序的需求进行定制。
例如,可以配置缓存数据的写入频率,以避免频繁地写入磁盘。
同时,也可以配置缓存数据的过期时间,以确保缓存数据不会在磁盘上存储过久。
使用ehcache3的持久化功能可以带来许多好处。
首先,它可以提高应用程序的可靠性,因为即使应用程序重启,缓存数据也不会丢失。
其次,它可以提高应用程序的性能,因为从磁盘读取数据比从数据库或其他远程存储读取数据更快。
最后,它还可以减轻数据库的负载,因为一部分数据可以从缓存中读取,而不是从数据库中读取。
ehcache3的持久化功能是一个强大而灵活的工具,可以帮助开发人员提高应用程序的性能和可靠性。
通过合理配置持久化规则,开发人员可以根据应用程序的需求来决定缓存数据的存储方式和读写频率,从而实现最佳的性能和可靠性的平衡。
无论是开发大型企业应用还是小型个人项目,ehcache3的持久化功能都是一个值得考虑的选择。
ehcachemanager 用法
ehcachemanager 用法
Ehcache Manager是一个缓存管理工具,用于管理缓存数据,其用法如下:
1. 引入依赖:在项目的`pom.xml`文件中,添加`<dependency>`标签,引入`net.sf.ehcache`的`ehcache`依赖。
2. 创建配置文件:在项目的`src/main/resources`目录下,创建一个名为`ehcache.xml`的文件,用于配置缓存管理器对象。
在配置文件中,可以使用`<cache>`标签配置多个缓存,每个缓存都有一个名称和最大本地堆大小,以及存活时间等属性。
完成配置后,可以通过调试模式运行单元测试,观察到Cache Manager已经是Ehcache Manager实例,表示Ehcache已经开启成功。
你可以根据实际需求,对Ehcache Manager进行更加细致的配置和使用。
如需了解更多相关信息,请补充相关细节继续向我提问。
Java缓存ehcache的使用步骤
Java缓存ehcache的使⽤步骤⽬录⼀、pom.xml⼆、编写ehcache.xml三、参数简介四、Ehcache的缓存数据淘汰策略五、编写spring-ehcache.xml六、与Spring整合,导⼊到spring配置⽂件七、Java Source code⼀、pom.xml<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>2.10.4</version></dependency>⼆、编写ehcache.xml<?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="/ehcache.xsd"><cacheManagerPeerProviderFactoryclass="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"properties="peerDiscovery=automatic, multicastGroupAddress=198.1.1.1,multicastGroupPort=10001,timeToLive=1" /><cacheManagerPeerListenerFactoryclass="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"properties="port=10001,socketTimeoutMillis=60000" /><!-- 磁盘缓存位置 --><diskStore path="java.io.tmpdir/anywhere" /><cache name="oneCache" maxElementsInMemory="1500" eternal="false"timeToIdleSeconds="900" timeToLiveSeconds="900" overflowToDisk="false"memoryStoreEvictionPolicy="LRU"><cacheEventListenerFactoryclass="net.sf.ehcache.distribution.RMICacheReplicatorFactory" properties="replicateRemovals=false"/><bootstrapCacheLoaderFactoryclass="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory" /></cache></ehcache>三、参数简介maxElementsInMemory缓存中允许创建的最⼤对象数eternal缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用到缓存,主要是用来解决并发问题的。
其中ehcache是一个纯Java的过程中缓存实现Hibernate2.1,Spring都支持EHcache嵌入。
本文主要写Spring中引入ehcache而不是用hibernate.
ehcache部署起来很简单,主要分两步:
1.首先要给他写个核心配置XML文件
Xml代码
<ehcache>
<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
diskPersistent="false"
diskExpiryThreadIntervalSeconds ="120"
memoryStoreEvictionPolicy="LRU"
/>
<cache name="cache1"
maxElementsInMemory="10000"
eternal="false" maxEle mentsOnDisk="1000"
overflowToDisk="true"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LFU"
/>
</ehcache>
属性解释:
简单配置,在ehcache.xml文件中有此配置,在使用Ehcache前最好将其删除掉,自己配置。
缓存名cache1,内存中最多可缓存10000个Element,其中的element会在闲置5分钟或是存活10分钟之后失效。
超过10000element时,element将会输出到磁盘中,输出路径是java.io.tmpdir。
从其他文章找到其详细解释:
· Cache配置
· name:Cache的唯一标识
· maxElementsInMemory:内存中最大缓存对象数。
· maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大。
· eternal:Element是否永久有效,一但设置了,timeout将不起作用。
· overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中。
· timeToIdleSeconds:设置Element在失效前的允许闲置时间。
仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
· timeToLiveSeconds:设置Element在失效前允许存活时间。
最大时间介于创建时间和失效时间之间。
仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大。
· diskPersistent:是否缓存虚拟机重启期数据。
(这个虚拟机是指什么虚拟机一直没看明白是什么,有高人还希望能指点一二)。
· diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
· diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。
默认是30MB。
每个Cache都应该有自己的一个缓冲区。
· memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。
默认策略是LRU(最近最少使用)。
你可以设置为FIFO(先进先出)或是LFU(较少使用)。
这里比较遗憾,Ehcache并没有提供一个用户定制策略的接口,仅仅支持三种指定策略,感觉做的不够理想。
2.实际要缓存的类调用
写一个实例类,这样大家就明白差不多了:
Java代码
import java.io.Serializable;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
public class Demo {
static CacheManager manager= new CacheManager();
/**
*###################################################### ########################
*
* @DESCRIBE
* @param args
* @throws InterruptedException
*
*###################################################### ########################
*/
public static void main(String[] args) throws Inter ruptedException {
String[] cacheNames = manager.getCacheNames();
System.out.println("读取的缓存列表为:");
for(int i=0;i<cacheNames.length;i++){
System.out.println("-- "+(i+1)+" "+cach eNames[i]);
}
Cache cache = manager.getCache("cache1");
Element element = new Element("key1", "value 1");
cache.put(element);
element = cache.get("key1");
Serializable value = element.getValue();
System.out.println("序列化后的值为:"+value.toString());
element = cache.get("key1");
Object value1 = element.getObjectValue();
System.out.println("未序列化的值为:"+value1.toString());
int elementsInMemory = cache.getSize();
System.out.println("得到缓存的对象数量:"+elementsInMemory);
long elementsInMemory1 = cache.getMemoryStoreS ize();
System.out.println("得到缓存对象占用内存的数量:"+elementsInMemory1);
long elementsInMemory2 = cache.getDiskStoreSiz e();
System.out.println("得到缓存对对象占用磁盘的数量:"+elementsInMemory2);
int hits = cache.getHitCount();
System.out.println("得到缓存读取的命中次数:"+hits);
int hits1 = cache.getMemoryStoreHitCount();
System.out.println("得到内存中缓存读取的命中次数:"+hits1);
int hits2 =cache.getDiskStoreHitCount();
System.out.println("得到磁盘中缓存读取的命中次数:"+hits2);
int hits3 = cache.getMissCountNotFound();
System.out.println("得到缓存读取的丢失次数:"+hits3);
int hits4 = cache.getMissCountExpired();
System.out.println("得到缓存读取的已经被销毁的对象丢失次数:"+hits4);
}
}。