Ehcache 2 缓存区配置详解
ehcache缓存配置说明
ehcache缓存配置说明前阵子用ehcache做缓存集群,现在结束了,所以整理了下配置文件的注释,有些是自己翻译的,仅供参考<cacheManagerPeerProviderFactoryclass="net.sf.ehcache.distribution.jgroups.JGroupsCacheManagerPeerProviderFactory" properties="connect=TCP(start_port=7800):TCPPING(initial_hosts=127.0.0.1[7800];port_range=10;timeout=3000;num_initial_members=3;u p_thread=true;down_thread=true):VERIFY_SUSPECT(timeout=1500;down_thread=false;up_thread=false):pbcast.NAKACK(down_thread=true;up_thread=true;gc_lag=100;retransmit_timeout=3000):pbcast.GMS(join_timeout=5000;join_retry_timeout=2000;shun=false;print_local_addr=false;dow n_thread=true;up_thread=true)"propertySeparator="::"/>cacheManagerPeerProviderFactory ehcache缓存监视器.connect=TCP 监视模式:TCP模式(还有UDP模式).start_port 指定监听起始端口.TCPPING 监听端口寻找广播方式(还有一种:TCPGOSSIP)寻找端口进行监听,从start_port开始递增port_range寻找可用的端口.initial_hosts 指定ehcache的所在主机IP(如果有多台主机的话initial_hosts=192.168.1.1[7800],192.168.1.2[7800]).port_range 递增值.timeout 没找到说明,猜测是寻找下一个有效端口前的停留时间.num_initial_members 初始成员,执行缓存同步的项目数up_thread,down_thread每个通信协议都会产生两个线程(up_thread,down_thread),用来控制队列的挂起和运行,可以通过设置up_thread=false;down_thread=false来使这两个线程失效VERIFY_SUSPECT 校验模块(问题出现时检验是服务死掉了,还是通信接口失效了)gc_lag 垃圾回收间隔retransmit_timeout 重新广播前等待的时间pbcast.NAKACK 确保消息正常广播,如果广播失败,接收者将重新请求,同时保证消息的先进先出原则pbcast.GMS 调度器,实时的广播,告知成员的变动情况,新增或者去除.join_timeout 加入时间限时join_retry_timeout 重试加入限时shun 自动尝试加入(新版本已被去除,不赞成使用)print_local_addr 打印出当前广播的地址==============================================================================<cacheEventListenerFactoryclass="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"properties="replicateAsynchronously=true, replicatePuts=true,replicateUpdates=true, replicateUpdatesViaCopy=false,replicateRemovals=true" />cacheEventListenerFactory 注册相应的的缓存监听类,用于处理缓存事件. replicateAsynchronously true|false 复制操作是异步(ture),还是同步(false)默认值为true. replicatePuts true|false 当新对象被放入缓存,集群内其他缓存也放入,默认为true. replicateUpdates true|false 新对象覆盖已经存在具有相同key的对象是否被复制,默认值为true.replicateUpdatesViaCopy true|false 直接将更新之后的对象复制到集群中的其他缓存(true);不复制对象,只想集群众的其他缓存发布一个对象更新的消息(false),默认为true.replicateRemovals true|false 对象被移除,是否复制状态到集群中其他缓存,默认true.==============================================================================<defaultCache maxElementsInMemory="500000" eternal="false"timeToIdleSeconds="1800" timeToLiveSeconds="1800"overflowToDisk="true" diskPersistent="true"><cacheEventListenerFactoryclass="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"properties="replicateAsynchronously=true, replicatePuts=true,replicateUpdates=true, replicateUpdatesViaCopy=false,replicateRemovals=true" /></defaultCache><defaultCache maxElementsInMemory="10000" eternal="false"timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true" diskSpoolBufferSizeMB="30" maxElementsOnDisk="10000000"diskPersistent="false" diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU"><cacheEventListenerFactoryclass="net.sf.ehcache.distribution.jgroups.JGroupsCacheReplicatorFactory"properties="replicateAsynchronously=true, replicatePuts=true,replicateUpdates=true, replicateUpdatesViaCopy=false,replicateRemovals=true" /></defaultCache>defaultCache 默认缓存,有些没有被配置的缓存对象将使用默认缓存maxElementsInMemory 内存中最大缓存对象数.当超过最大对象数的时候,ehcache会按指定的策略去清理内存eternal 缓存对象是否永久有效,一但设置了,timeout将不起作用.timeToIdleSeconds 设置Element在失效前的允许闲置时间.仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大.timeToLiveSeconds timeToLiveSeconds:设置Element在失效前允许存活时间.最大时间介于创建时间和失效时间之间.仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大.overflowToDisk 配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中.diskSpoolBufferSizeMB 这个参数设置DiskStore(磁盘缓存)的缓存区大小.默认是30MB.每个Cache都应该有自己的一个缓冲区.maxElementsOnDisk 磁盘中最大缓存对象数,若是0表示无穷大.diskPersistent 是否在重启服务的时候清楚磁盘上的缓存数据.true不清除. diskExpiryThreadIntervalSeconds 磁盘失效线程运行时间间隔. memoryStoreEvictionPolicy memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存.默认策略是LRU(最近最少使用).你可以设置为FIFO(先进先出)或是LFU(较少使用).注:普通cache同defaultCache的属性一样,可以根据自己的实际需求去配置。
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是一个纯Java的过程中缓存实现Hibernate2.1,Spring都支持EHcache嵌入。
本文主要写Spring中引入ehcache而不是用hibernate.ehcache部署起来很简单,主要分两步:1.首先要给他写个核心配置XML文件Xml代码<ehcache><diskStore path="java.io.tmpdir"/><defaultCachemaxElementsInMemory="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前最好将其删除掉,自己配置。
二级缓存
二级缓存1.二级缓存相关介绍①缓存好处:将数据库或者硬盘数据,保存在内存中,减少数据库查询次数,减少硬盘交互,提高检索效率hibernate 共有两个级别的缓存* 一级缓存,保存Session中,事务范围的缓存* 二级缓存,保存SessionFactory ,进程范围的缓存SessionFacoty 两部分缓存内置:Hibernate 自带的, 不可卸载. 通常在Hibernate 的初始化阶段, Hibernate 会把映射元数据和预定义的SQL 语句放到SessionFactory 的缓存中, 映射元数据是映射文件中数据的复制, 而预定义SQL 语句时Hibernate 根据映射元数据推到出来的. 该内置缓存是只读的.外置:一个可配置的缓存插件. 在默认情况下, SessionFactory 不会启用这个缓存插件. 外置缓存中的数据是数据库数据的复制, 外置缓存的物理介质可以是内存或硬盘,必须引入第三方缓存插件才能使用。
2.二级缓存内部结构学习* 类缓存区域* 集合缓存区域* 更新时间戳区域* 查询缓存区域3.二级缓存并发策略transactional :提供Repeatable Read事务隔离级别,缓存支持事务,发生异常的时候,缓存也能够回滚read-write :提供Read Committed事务隔离级别,更新缓存的时候会锁定缓存中的数据nonstrict-read-write :导致脏读,很少使用read-only :数据不允许修改,只能查询* 很少被修改,不是很重要,允许偶尔的并发问题,适合放入二级缓存。
考虑因素(二级缓存的监控【后面学习】,它是是否采用二级缓存主要参考指标)4.hibernate 支持二级缓存技术* EHCache (主要学习,支持本地缓存,支持分布式缓存)可作为进程范围内的缓存, 存放数据的物理介质可以是内存或硬盘, 对Hibernate 的查询缓存提供了支持。
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缓存参数时,需要注意以下几点:- 根据应用程序的需求合理设置缓存的空闲和存活时间,以免存储过期或无用的数据。
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缓存配置# 在pom.xml中引⼊依赖<dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><version>2.10.6</version></dependency># 在src/main/resources/创建⼀个配置⽂件 ehcache.xml默认情况下Ehcache会⾃动加载classpath根⽬录下名为ehcache.xml⽂件,也可以将该⽂件放到其他地⽅在使⽤时指定⽂件的位置。
<?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="/ehcache.xsd"><!-- 磁盘缓存位置 --><diskStore path="java.io.tmpdir/ehcache"/><!-- 默认缓存 --><defaultCachemaxEntriesLocalHeap="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"maxEntriesLocalDisk="10000000"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"><persistence strategy="localTempSwap"/></defaultCache><!-- helloworld缓存 --><cache name="HelloWorldCache"maxElementsInMemory="1000"eternal="false"timeToIdleSeconds="5"timeToLiveSeconds="5"overflowToDisk="false"memoryStoreEvictionPolicy="LRU"/></ehcache># 测试类public class CacheTest {public static void main(String[] args) throws IOException {// 1. 创建缓存管理器。
Hibernate配置EhCache缓存之annotation注解
Hibernate配置EhCache缓存之annotation注解ms注解是种流行,越来越多的注解,越来越多的零配置1. 首先设置EhCache,建立配置文件ehcache.xml,默认的位置在class-path,可以放到你的src目录下:2. 在Hibernate配置文件中设置:此外,可以把e_second_level_cache设置为false关闭所有的hibernate二级缓存。
但此属性对指定<cache>的类缺省为true。
3. 为了使用二级缓存,需要在每一个Hibernate Entity上配置。
(1) usage: 提供缓存对象的事务隔离机制,可选值有以下几种(NONE, READ_ONLY, NONSTRICT_READ_WRITE, READ_WRITE, TRANSACTIONAL)ehcache不支持transactional,其他三种可以支持。
read-only:无需修改,那么就可以对其进行只读缓存,注意,在此策略下,如果直接修改数据库,即使能够看到前台显示效果,但是将对象修改至cache中会报error,cache不会发生作用。
另:删除记录会报错,因为不能在read-only模式的对象从cache中删除。
read-write:需要更新数据,那么使用读/写缓存比较合适,前提:数据库不可以为serializable transaction isolation level (序列化事务隔离级别)nonstrict-read-write:只偶尔需要更新数据(也就是说,两个事务同时更新同一记录的情况很不常见),也不需要十分严格的事务隔离,那么比较适合使用非严格读/写缓存策略。
(2) region (optional): 指定缓存的区域,默认是类的全限定名。
利用缓存区域,可以更精确的指定每个区域的缓存超前策略。
如果指定了缓存区域前缀(在hibernate.cfg.xml中设置cache.region_prefix属性为一个字符串),则所有的缓存区域名前将加上这个前缀。
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 还提供了堆外缓存的支持。
hibernate二级缓存研究实验结论
hibernate二级缓存研究实验结论一、二级缓存基本说明:1、ehcache.xml配置说明,开发中放在src下<diskStore>元素:指定一个文件目录,当指定的内存不够时,把数据写到硬盘上时,将把数据写到这个文件目录下。
下面的参数这样解释:user.home –用户主目录user.dir –用户当前工作目录java.io.tmpdir –默认临时文件路径<defaultCache>元素:设定缓存的默认数据过期策略,如果没有任何设置,将使用该策略。
<cache>元素:设定具体的命名缓存的数据过期策略。
<cache>元素的属性name:缓存名称。
通常为缓存对象的类名(非严格标准),如果为实体对象的包名称.类名称时,那么实体的配置中可以省去<cache标签的region="regionName" 属性的配置。
maxElementsInMemory:设置基于内存的缓存可存放对象的最大数目。
maxElementsOnDisk:设置基于硬盘的缓存可存放对象的最大数目。
eternal:如果为true,表示对象永远不会过期,此时会忽略timeToIdleSeconds和timeToLiveSeconds 属性,默认为false;timeToIdleSeconds:设定允许对象处于空闲状态的最长时间,以秒为单位。
当对象自从最近一次被访问后,如果处于空闲状态的时间超过了timeToIdleSeconds属性值,这个对象就会过期。
当对象过期,EHCache将把它从缓存中清空。
只有当eternal属性为false,该属性才有效。
如果该属性值为0,则表示对象可以无限期地处于空闲状态。
timeToLiveSeconds:设定对象允许存在于缓存中的最长时间,以秒为单位。
hibernate二级缓存
hibernate二级缓存二级缓存配置1、需要引入第三方的jar包,hibernate的Cglib.jar。
2、在缓存的配置文件来控制缓存,我们可以拷贝hibernate已有项目中的ehcache.xml配置文件到自己的项目中。
通过这个文件,我们可以对二级缓存进行设置,例如缓存的时间,缓存的代销,缓存间隔多长时间自动被清掉,缓存超时间直接缓存到磁盘指定的位置上等设置。
3、在hibernate.cfg.xml文件中加入缓存产品提供商。
<propertyname="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>4、启用二级缓存,设置为true,默认是true,添加上有助于我们手动关闭和开启二级缓存。
<propertyname="e_second_level_cache">true</property>5、指定哪些实体类使用二级缓存。
方法一:在对应实体的.hbm.xml文件中设置,<cacheusage="read-only"/>这样如果我们想要知道二百个映射文件哪些使用了二级缓存,就要查看二百个文件,所以我们可以把对实体加入二级缓存的策略放到hibernate.cfg.xml进行配置。
也就是方法二。
方法二:处于好管理的目的我们把哪个实体使用二级缓存的配置放到hibernate.cfg.xml文件中。
例如执行把student 实体加入二级缓存策略。
指定Student使用二级缓存<class-cacheclass="com.bjpowernode.hibernate.Student"usage="read-only"/>注意:缓存策略通常采用read-only和read-write缓存原则;通常是读大于写的数据进行缓存。
Ehcache缓存配置以及基本使用
Ehcache缓存配置以及基本使⽤在java项⽬⼴泛的使⽤。
它是⼀个开源的、设计于提⾼在数据从RDBMS中取出来的⾼花费、⾼延迟采取的⼀种缓存⽅案。
正因为Ehcache 具有健壮性(基于java开发)、被认证(具有apache 2.0 license)、充满特⾊(稍后会详细介绍),所以被⽤于⼤型复杂分布式web application的各个节点中。
够快Ehcache的发⾏有⼀段时长了,经过⼏年的努⼒和不计其数的性能测试,Ehcache终被设计于large, high concurrency systems.够简单开发者提供的接⼝⾮常简单明了,从Ehcache的搭建到运⽤运⾏仅仅需要的是你宝贵的⼏分钟。
其实很多开发者都不知道⾃⼰⽤在⽤Ehcache,Ehcache被⼴泛的运⽤于其他的开源项⽬⽐如:hibernate够袖珍关于这点的特性,官⽅给了⼀个很可爱的名字small foot print ,⼀般Ehcache的发布版本不会到2M,V 2.2.3 才 668KB。
够轻量核⼼程序仅仅依赖slf4j这⼀个包,没有之⼀!好扩展Ehcache提供了对⼤数据的内存和硬盘的存储,最近版本允许多实例、保存对象⾼灵活性、提供LRU、LFU、FIFO淘汰算法,基础属性⽀持热配置、⽀持的插件多监听器缓存管理器监听器(CacheManagerListener)和缓存监听器(CacheEvenListener),做⼀些统计或数据⼀致性⼴播挺好⽤的如何使⽤?POM⽂件<!--加⼊缓存--><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache-core</artifactId><version>2.6.6</version></dependency>配置⽂件在resources资源⽬录下创建⼀个ehcache-config.xml⽂件,内容如下:<?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="/ehcache.xsd"updateCheck="false"><!-- EhCache在每次启动的时候都要连接到 ehcache ⽹站上去检查新版本使⽤如上的 updateCheck="false" 来禁⽌这个检查新版本 --><!--name:cache唯⼀标识eternal:缓存是否永久有效maxElementsInMemory:内存中最⼤缓存对象数overflowToDisk(true,false):缓存对象达到最⼤数后,将缓存写到硬盘中diskPersistent:硬盘持久化timeToIdleSeconds:缓存清除时间timeToLiveSeconds:缓存存活时间diskExpiryThreadIntervalSeconds:磁盘缓存的清理线程运⾏间隔memoryStoreEvictionPolicy:缓存清空策略1.FIFO:first in first out 先讲先出2.LFU: Less Frequently Used ⼀直以来最少被使⽤的3.LRU:Least Recently Used 最近最少使⽤的--><diskStore path="java.io.tmpdir/ehcache" /><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="true"maxElementsOnDisk="10000000"diskPersistent="false"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="FIFO" /><!-- 缓存 --><cache name="cache_mall_keys"maxElementsInMemory="200"eternal="false"timeToIdleSeconds="7200"timeToLiveSeconds="7200"overflowToDisk="true"maxElementsOnDisk="1000"diskPersistent="false"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="FIFO" /><!-- 缓存 --><cache name="cache_pos_codes"maxElementsInMemory="200"eternal="false"timeToIdleSeconds="43200"timeToLiveSeconds="43200"overflowToDisk="true"maxElementsOnDisk="1000"diskPersistent="false"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="FIFO" /></ehcache>Spirng整合配置注意⼀下内容必须注册在Spring的主配置⽂件中<!--缓存配置⽂件接⼝--><cache:annotation-driven cache-manager="cacheManager"/><bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"><property name="configLocation" value="classpath:ehcache-config.xml"></property></bean><bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager"><property name="cacheManager" ref="cacheManagerFactory"></property></bean>使⽤⽅法这⾥可以使⽤注解的⽅式 @Cacheable(value = "cache_pos_codes") 其中value的是设置的配置⽂件ehcache-config.xml的配置名称。
14..查询缓存-二级缓存-mybatis整合ehcache
4、测试
class Test{
public void testCache2(){
SqlSession sqlSession1=sqlSessionFactory.openSession();
SqlSession sqlSession2=sqlSessionFactory.openSession();
System.out.println( user2 );
sqlSession2.close();
}
}
使用debug查看控制台日志信息。
System.out.println( user1 );
//这里执行关闭操作,将SqlSession中的数据写到二级缓存区域。
sqlSession1.close();
/*
//使用SqlSession3执行commit()操作
UserMapper userMapper3=sqlSession3.getMapper(UserMapper.class);
<!--<diskStore path="F:\develop\ehcache"/>-->
<defaultCache
maxElementsInMemory="1000"
maxElementsOnDisk="10000000"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
diskExpiryThreadIntervalSecond="120"
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虚拟机堆内存中的缓存项的最大字节数。
Hibernate二级缓存详解
Hibernate二级缓存详解与Session相对的是,SessionFactory也提供了相应的缓存机制。
SessionFactory缓存可以依据功能和目的的不同而划分为内置缓存和外置缓存。
SessionFactory的内置缓存中存放了映射元数据和预定义SQL语句,映射元数据是映射文件中数据的副本,而预定义SQL语句是在Hibernate初始化阶段根据映射元数据推导出来的。
SessionFactory 的内置缓存是只读的,应用程序不能修改缓存中的映射元数据和预定义SQL语句,因此SessionFactory 不需要进行内置缓存与映射文件的同步。
SessionFactory的外置缓存是一个可配置的插件。
在默认情况下,SessionFactory不会启用这个插件。
外置缓存的数据是数据库数据的副本,外置缓存的介质可以是内存或者硬盘。
SessionFactory的外置缓存也被称为Hibernate的二级缓存。
Hibernate的二级缓存的实现原理与一级缓存是一样的,也是通过以ID为key的Map来实现对对象的缓存。
由于Hibernate的二级缓存是作用在SessionFactory范围内的,因而它比一级缓存的范围更广,可以被所有的Session对象所共享。
14.2.3.1 二级缓存的工作内容Hibernate的二级缓存同一级缓存一样,也是针对对象ID来进行缓存。
所以说,二级缓存的作用范围是针对根据ID获得对象的查询。
二级缓存的工作可以概括为以下几个部分:●在执行各种条件查询时,如果所获得的结果集为实体对象的集合,那么就会把所有的数据对象根据ID放入到二级缓存中。
●当Hibernate根据ID访问数据对象的时候,首先会从Session一级缓存中查找,如果查不到并且配置了二级缓存,那么会从二级缓存中查找,如果还查不到,就会查询数据库,把结果按照ID放入到缓存中。
●删除、更新、增加数据的时候,同时更新缓存。
ehcache缓存参数
ehcache缓存参数缓存是一种常用的提升系统性能的技术,它可以将数据存储在高速缓存中,以便快速响应用户的请求,减少对数据库等底层资源的访问。
而ehcache是一种常用的Java缓存框架,它具有简单易用、高性能、可扩展等特点,被广泛应用于各种Java项目中。
本文将介绍ehcache缓存参数的相关知识,帮助读者更好地理解和使用ehcache。
一、缓存策略在使用ehcache进行缓存时,需要根据具体的需求选择适合的缓存策略。
ehcache提供了多种缓存策略,包括FIFO(先进先出)、LRU(最近最少使用)、LFU(最不常用)等。
这些策略都有各自的优劣势,需要根据实际情况进行选择。
比如,如果希望尽量减少缓存的占用空间,可以选择LFU策略;如果希望保证缓存的命中率,可以选择LRU策略。
在ehcache中,可以通过配置文件或代码来指定缓存策略。
二、缓存大小缓存大小是指缓存可以存储的最大数据量。
ehcache提供了多种配置方式来设置缓存大小,包括固定大小、最大元素数、最大占用内存等。
在配置缓存大小时,需要考虑系统的内存资源和数据量大小,以避免缓存溢出或占用过多内存的情况发生。
可以根据实际情况进行调整,以达到性能和资源的平衡。
三、缓存过期时间缓存过期时间是指缓存中的数据在一定时间后自动失效。
在ehcache中,可以通过配置文件或代码来设置缓存的过期时间。
根据实际需求,可以设置不同的过期时间,以满足业务的要求。
比如,对于一些频繁变动的数据,可以设置较短的过期时间,以保证数据的及时更新;对于一些不经常变动的数据,可以设置较长的过期时间,以提高缓存的命中率。
四、缓存刷新时间缓存刷新时间是指缓存中的数据在一定时间后自动刷新。
在ehcache中,可以通过配置文件或代码来设置缓存的刷新时间。
与缓存过期时间不同的是,缓存刷新时间是在缓存过期前一定时间内,自动刷新缓存的数据。
这样可以保证在缓存失效前,始终有可用的数据,避免了缓存失效时的数据不一致问题。
ehcache 缓存参数
ehcache 缓存参数什么是ehcache缓存参数,以及如何进行配置和优化?EHCache是一个可靠且高效的开源Java缓存框架。
它具有易于使用的API,支持多种缓存策略,并通过减少数据库访问时间来提高应用程序的性能。
在使用EHCache的过程中,了解和理解缓存参数的含义、作用以及如何进行配置和优化非常重要。
一.什么是EHCache缓存参数?EHCache缓存参数是指在配置EHCache缓存时需要设置的参数,用于指导EHCache缓存的行为和性能。
这些参数包括缓存大小、缓存策略、过期时间、最大空闲时间、缓存刷新策略等。
1.缓存大小:缓存大小指的是可以存放在缓存中的最大对象数量。
通过设置缓存大小,可以控制缓存中对象的数量,避免缓存过大或过小的情况。
在内存充足的情况下,可以适当增大缓存大小,以提高缓存的命中率。
2.缓存策略:EHCache提供了多种缓存策略,包括LRU(最近最少使用)、LFU(最少使用)、FIFO(先进先出)等。
不同的缓存策略适用于不同的场景和需求。
根据具体的使用情况,选择适合的缓存策略可以提高缓存的效果。
3.过期时间:过期时间指的是缓存对象在缓存中存放的时间,超过该时间后缓存对象将被自动删除。
通过设置合适的过期时间,可以保证缓存中的数据始终保持较高的准确性。
4.最大空闲时间:最大空闲时间指的是缓存对象在缓存中处于非活跃状态的最长时间。
如果一个缓存对象在一段时间内没有被访问,它将被判定为空闲状态。
通过设置最大空闲时间,可以在缓存对象长时间不被访问时自动清除这些对象,释放缓存空间。
5.缓存刷新策略:缓存刷新策略用于定义在缓存对象过期后如何进行刷新。
EHCache提供了多种缓存刷新策略,如定时刷新、异步刷新等。
通过设置合适的刷新策略,可以及时更新缓存中的数据,提高应用程序的性能和准确性。
二.如何配置EHCache缓存参数?EHCache的缓存参数配置主要通过xml文件进行。
下面是一个示例的ehcache.xml配置文件的内容:<ehcache xmlns:xsi=" xsi:noNamespaceSchemaLocation="<defaultCache maxElementsInMemory="1000" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="600"><persistence strategy="localTempSwap"/></defaultCache><cache name="exampleCache" maxElementsInMemory="10000" eternal="true" timeToIdleSeconds="0" timeToLiveSeconds="0"><persistence strategy="none"/></cache></ehcache>在这个示例配置中,我们定义了一个defaultCache和一个名为exampleCache的缓存。
Ehcache缓存配置
Ehcache缓存配置简介Cache的配置很灵活,官方提供的Cache配置方式有好几种。
你可以通过声明配置、在xml中配置、在程序里配置或者调用构造方法时传入不同的参数。
你可以将Cache的配置从代码中剥离出来,也可以在使用运行时配置,所谓的运行时配置无非也就是在代码中配置。
以下是运行时配置的好处:∙ 在同一个地方配置所有的Cache,这样很容易管理Cache的内存和磁盘消耗。
∙ 发布时可更改Cache配置。
∙ 可再安装阶段就检查出配置错误信息,而避免了运行时错误。
本文将会对ehcache.xml配置文件进行详细的阐述。
在配置的时可以拷贝一个现有的ehcache.xml,如果没有请点击这里去下载。
ehcache-failsafe.xml如果你调用了CacheManager默认构造方法去创建CacheManager的实例,此方法会到classpath中找ehcache.xml文件,否则它会到类路径下找ehcache-failsafe.xml文件。
而ehcache-failsafe.xml被包含在jar包中,所有它肯定能找的到。
ehcache-failsafe.xml提供了一个非常简单的默认配置,这样可以使用户在没有创建ehcache.xml的情况下使用Ehcache。
不过这样做Ehcache会提醒用户创建一个正确的Ehcache配置。
ehcache.xml片段:<ehcache><diskStore path="java.io.tmpdir"/><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="true"maxElementsOnDisk="10000000"diskPersistent="false"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"/></ehcache>ehcache.xml和其他配置文件在Ehcache-1.6之前的版本,只支持ASCII编码的ehcache.xml配置文件。
二级缓存(ehcache)
以下是使用hibernate二级缓存时常遇到的一些配置的详细解释,希望对各位有所帮助:配置一:hibernate.cfg.xml文件中增加<!--开启二级缓存--><propertyname="cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <property name="e_query_cache">true</property>配置二:工程项目src文件下新建一个ehcache.xml文件,其内容为<!--开启二级缓存--><?xml version="1.0" encoding="UTF-8"?><ehcache><diskStore path="java.io.tmpdir" /><defaultCache maxElementsInMemory="10000" eternal="false" overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="180" diskPersistent="false" diskExpiryThreadIntervalSeconds="120" /></ehcache>配置三:为了缓存某类的对象,其hbm文件中需添加<cache usage="read-only"/>属性例如:<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""/hibernate-mapping-3.0.dtd"><!--Mapping file autogenerated by MyEclipse - Hibernate Tools--><hibernate-mapping><class name="com.vogue.bbsphoto.entity.Forum"table="cdb_forums"><cache usage="read-only"/><id name="ID" column="fid" unsaved-value="null"><generator class="increment" /></id><property name="name" column="name" type="string" /><property name="type" column="type" type="string" /></class></hibernate-mapping>配置四:为了使用查询缓存,Query必须设置cacheable为true,query.setCacheable(true);例如dao父类中用于hql查询的方法修改后为:/*** 执行hql语句的查询* @param sql* @return*/public List executeQuery(String hql){List list = new ArrayList();Session session = HibernateSessionFactory.currentSession();Transaction tx = null;Query query = session.createQuery(hql);query.setCacheable(true);try {tx = session.beginTransaction();list = query.list();mit();} catch (Exception ex) {ex.printStackTrace();HibernateSessionFactory.rollbackTransaction(tx);} finally {HibernateSessionFactory.closeSession();}return list;}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Ehcache 2 缓存区配置详解第1章Ehcache简介EhCache是一个开放源码的,基于标准的高速缓存系统。
Ehcache可以显著提高应用性能,降低数据库负载,简化应用扩展。
Ehcache健壮、功能齐全,也历经了众多应用考验,使得它成为使用最广泛的基于Java的缓存系统。
Ehcache可以支持从进程内的一个或多个节点的部署方式到进程内与进程外混合、高达TB 大小的高速缓存。
Ehcache目前由Terracotta公司维护,使用Apache 2 许可证。
Ehcache截止目前最新版本为2.6。
支持多种方式缓存:●Standalone模式。
嵌入应用进程内。
单点,多节点间无沟通。
●Replication模式。
嵌入应用内部,通过RMI或JGroup或JMS进行节点同步。
●Cache Server模式。
作为独立缓存服务器,提供REST与WebService接口供访问。
●Distributed Caching模式。
采用Terracotta Server Array实现高可用的分布式缓存。
Standalone与Replication均是较传统的使用方式,很多场景下难以满足动态基础设施环境下应用弹性的要求。
Cache Server使得缓存服务可以容易的进行水平扩展,但是基于REST与WebService的访问方式降低了缓存访问的效率,不太适合对缓存实时性要求较高的场景。
Distributed Caching模式提供了进程内与进程间缓存较理想的结合模式,支持水平扩展,高可用,对网络依赖程度较低,可以很好适应应用弹性伸缩,是动态基础设施条件下较理想的缓存模式。
第2章Ehcache 2 缓存区配置Ehcache默认配置文件在Ehcache客户端的classpath根目录下,名为ehcache.xml。
典型的配置文件如下:<?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="ehcache.xsd"updateCheck="false" monitoring="autodetect"dynamicConfig="true" name="example"><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="true"diskSpoolBufferSizeMB="30"maxElementsOnDisk="10000000"diskPersistent="false"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"/><cache name="colors"maxElementsInMemory="100"maxElementsOnDisk="0"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="0"memoryStoreEvictionPolicy="LFU"><terracotta/></cache><terracottaConfig url="localhost:9510"/></ehcache>缓存区使用<cache/>标签进行配置,主要属性以及意义如下:⏹name(必填属性):缓存区名称,用以区别缓存区,必须唯一。
⏹maxEntriesLocalHeap(必填属性):设置缓存在本地内存中最大缓存项数量(0表示无限)。
(等效于旧版本中的maxElementsInMemory属性)。
在实际使用中,在非分布式部署条件下,无限等效于Integer.MAX_SIZE (2147483647)。
在分布式部署条件下,缓存项数量由Terracotta Server Array资源上限决定。
⏹maxEntriesLocalDisk(必填属性):设置保存在本地磁盘中的的最大缓存项数量。
默认为0,表示数量不限。
⏹eternal(必填属性):设置缓存项是否为永久的。
如果设置为true,缓存项的过期设置将被忽略,缓存项永不过期。
⏹overflowToOffHeap:此属性仅在使用Ehcache企业版时有效。
设置为true,缓存将使用非堆内存,非堆内存并非由Java管理,与Java垃圾回收无关。
默认为false。
⏹maxBytesLocalHeap:定义保存在Java虚拟机堆内存中的缓存项的最大字节数。
定义时格式如下<number>k|K|m|M|g|G,其中k|K代表千字节,m|M代表兆字节,g|G代表吉字节。
举例:maxBytesLocalHeap="2g"将使用2G堆内存。
此属性与maxEntriesLocalHeap互斥,指定了此属性,则不能指定maxEntriesLocalHeap。
如果设定过CacheManager的maxBytesLocalHeap属性,也不能使用此属性。
放入缓存的缓存项将使用net.sf.ehcache.pool.sizeof.SizeOf方法计算其字节数。
如果希望在计算字节数时忽略对象树种的某些属性,请参考net.sf.ehcache.pool.sizeof.annotations.IgnoreSizeOf注解。
⏹maxBytesLocalOffHeap:此属性仅在使用Ehcache企业版时有效。
设置本缓存区使用的非堆内存的大小。
指定此属性,将默认设置overflowToOffHeap 为true。
如果特别指定了overflowToOffHeap=”false”,将禁止使用非堆内存。
注意:当使用非堆内存时,推荐将maxEntriesLocalHeap设置为大于等于100,否则将严重影响性能。
也将看到一条警告日志。
非堆内存最小值为128MB,没有上限。
⏹maxBytesLocalDisk:和maxBytesLocalHeap属性类似,不过指定的是存储在本地磁盘上的缓存项最大可使用的字节数。
⏹timeToIdleSeconds:设置一个缓存项在过期前的闲置时间。
即一个缓存项在其过期前,两次访问间隔的最大时间。
仅在缓存项为非永久时有效。
0表示不限闲置时间,默认为0。
⏹timeToLiveSeconds:设置一个缓存项在过期前的生存时间。
即从缓存项创建到过期的最大时间。
仅在缓存项为非永久时有效。
0表示不限生存时间,默认为0。
⏹diskExpiryThreadIntervalSeconds:清理保存在磁盘上的过期缓存项目的线程的启动时间间隔,默认120秒。
⏹diskSpoolBufferSizeMB:磁盘缓冲区的大小。
写入磁盘的内容将缓冲在此区域,使用异步的方式写入磁盘。
默认30MB,每一个缓存区使用独立的缓冲区,如果遇到OutOfMemory错误时,可以尝试减小这个值。
改进磁盘写入性能时,尝试增加这个值。
将日志级别开到Trace,当DiskStore执行磁盘写入时,可以看到对应日志。
⏹clearOnFlush:当flush()方法调用时,MemoryStore是否清空其内容,默认为true,即清空。
⏹statistics:是否收集统计信息。
如果需要监控缓存使用情况,应该打开这个选项。
默认为关闭(统计会影响性能)。
设置statistics="true"开启统计。
⏹memoryStoreEvictionPolicy:当缓存项达到maxEntriesLocalHeap限制时,剔除缓存项的策略。
默认为LRU(Least Recently Used)。
其他的策略有:FIFO(First In First Out)和LFU(Less Frequently Used)。
⏹copyOnRead:当缓存项被读出时,是否返回一份它的拷贝(返回对象是缓存中对象的拷贝)。
默认false。
⏹copyOnWrite:当缓存项被写入时,是否写入一份它的拷贝(写入缓存的是写入对象的拷贝)。
默认false。
通过使用<persistence/>子元素,可以配置缓存区的持久化策略。
<persistence/>元素的主要属性如下:strategy:配置缓存区持久化的类型。
可选值如下:localRestartable:仅在使用Ehcache企业版时有效。
启用RestartStore,拷贝所有的缓存项(包含堆和非堆中的)到磁盘中,此选项提供了缓存快速重启能力以及对磁盘上缓存的容错能力。
localTempSwap:当缓存容量达到上限时,将缓存对象(包含堆和非堆中的)交换到磁盘中。
"localTempSwap" 并不持久化缓存内容。
none:不持久化缓存内容。
distributed:按照<terracotta>标签配置的持久化方式执行。
非分布式部署时,此选项不可用。
synchronousWrites:此属性仅在strategy="localRestartable"时有意义。
默认false。
设置为true,缓存写入方法在缓存项成功写入磁盘前不会返回。
至此,缓存区主要配置介绍完毕。
第3章旧版本向新版本迁移本章总结了Ehcache1.5版本向Ehcache2.6版本迁移时的一些问题:●maxElementsInMemory属性被maxEntriesLocalHeap代替。
●使用分布式缓存时,缓存区overflowToDis和diskPersistent都必须设置为"false"(分布式模式下不支持这个属性),maxElementsOnDisk属性建议设置为大于0的值(此时这个属性作用于Terracotta Server Array中这个缓存区,并非本地缓存)。