Ehcache缓存配置

【Ehcache缓存配置】
1.配置方式:
·声明配置
·在xml中配置
·运行时配置(在程序里配置 或 调用构造方法传入不同的参数)
2.好处:
·在同一个地方配置所有的Cache,这样很容易管理Cache的内存和磁盘消耗。
·发布时可更改Cache配置。
·可再安装阶段就检查出配置错误信息,而避免了运行时错误。
3.1)如果调用了CacheManager默认构造方法去创建CacheManager的实例,此方法会到classpath中找ehcache.xml文件。
例如:
<cache:annotation-driven cache-manager="cacheManager" />
<bean id="cacheManagerFactory" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" p:configLocation="classpath:ehcache.xml" p:shared="false" />
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager" p:cacheManager-ref="cacheManagerFactory" />
  2)否则,它会到类路径下找【ehcache-failsafe.xml】文件。而ehcache-failsafe.xml被包含在jar包中,所以它肯定能找到的。
ehcache-failsafe.xml提供了一个非常简单的默认配置,这样可以使用户在没有创建ehcache.xml的情况下使用Ehcache。 
4.Ehcache配置实例: 

  1)Spring中配置:

<?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.1.xsd
							http://www.springframework.org/schema/cache
							http://www.springframework.org/schema/cache/spring-cache-3.1.xsd">

		<!-- 开启spring缓存 -->
		<cache:annotation-driven cache-manager="cacheManager" />
		<bean id="cacheManagerFactory"
			class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"
			p:configLocation="classpath:ehcache.xml" 
			p:shared="false" />
		<bean id="cacheManager" 
			class="org.springframework.cache.ehcache.EhCacheCacheManager"
			p:cacheManager-ref="cacheManagerFactory" />

	</beans>



  2)ehcache.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
	<ehcache 
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
		xsi:noNamespaceSchemaLocation="ehcache.xsd" 
		updateCheck="true" monitoring="autodetect" dynamicConfig="true">
		
		<!-- 
			DiskStore配置
			如果你使用的DiskStore(磁盘缓存),你必须要配置DiskStore配置项。如果不配置,Ehcache将会使用java.io.tmpdir。
			diskStroe的“path”属性是用来配置磁盘缓存使用的物理路径的,Ehcache磁盘缓存使用的文件后缀名是.data和.index。
		
		 -->
		
		<!--
			Cache缓存配置 
			name:缓存名称,Cache的唯一标识。
			maxElementsInMemory:内存中最大缓存对象数。
			eternal:对象是否永久有效,一但设置了,timeout将不起作用。
			timeToIdleSeconds:设置对象在失效前的允许闲置时间(单位:秒)。仅当(eternal=false)对象不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大。
			timeToLiveSeconds:当缓存存活n秒后销毁。设置对象在失效前允许存活时间(单位:秒)。最大时间介于创建时间和失效时间之间。仅当eternal=false对象不是永久有效时使用,默认是0.,也就是对象存活时间无穷大。
			overflowToDisk:当内存中对象数量达到maxElementsInMemory时,Ehcache将会对象写到磁盘中。
			diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区。
			maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大。 
			diskPersistent:是否缓存虚拟机重启期数据(默认为false)。 Whether the disk store persists between restarts of the Virtual Machine. The default value is false.
			diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒。
			memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)。这里比较遗憾,Ehcache并没有提供一个用户定制策略的接口,仅仅支持三种指定策略,感觉做的不够理想。
			clearOnFlush:内存数量最大时是否清除。
		-->
		
		<diskStore path="java.io.tmpdir" />
		<!-- 
			<diskStore path="c:/cachetmpdir" /> 
		-->
		
		<!-- 
			内存中最多可缓存10000个Element
			对象不是永久有效
			对象闲置5分钟之后失效
			对象存活10分钟之后失效
			超过10000个对象时,对象将会输出到磁盘中,输出路径是java.io.tmpdir
			磁盘中最大缓存10000000个对象
			不缓存虚拟机重启期数据
			磁盘失效线程运行时间间隔为2分钟
			当达到内存最大缓存时,Ehcache会根据LRU(最近最少使用)策略,清理内存。
		-->
		<defaultCache 
			maxElementsInMemory="10000"				
			eternal="false"
			timeToIdleSeconds="300" 
			timeToLiveSeconds="600" 
			overflowToDisk="true"
			diskSpoolBufferSizeMB="30"
			maxElementsOnDisk="10000000" 
			diskPersistent="false"
			diskExpiryThreadIntervalSeconds="120" 
			memoryStoreEvictionPolicy="LRU" />
				
		<cache 
			name="syproMenuCache" 
			maxElementsInMemory="0"
			maxElementsOnDisk="10000000" 
			eternal="true" 
			overflowToDisk="true"
			diskSpoolBufferSizeMB="50" />
		<cache 
			name="syproResourcesCache" 
			maxElementsInMemory="0"
			maxElementsOnDisk="10000000" 
			eternal="true" overflowToDisk="true"
			diskSpoolBufferSizeMB="50" />
		<cache 
			name="syproAuthCache" 
			maxElementsInMemory="0"
			maxElementsOnDisk="10000000" 
			eternal="true" 
			overflowToDisk="true"
			diskSpoolBufferSizeMB="50" />
		<cache 
			name="syproUserCache" 
			maxElementsInMemory="0"
			maxElementsOnDisk="10000000" 
			eternal="true" 
			overflowToDisk="true"
			diskSpoolBufferSizeMB="50" />
		<cache 
			name="syproRoleCache" 
			maxElementsInMemory="0"
			maxElementsOnDisk="10000000" 
			eternal="true" 
			overflowToDisk="true"
			diskSpoolBufferSizeMB="50" />
		<cache 
			name="syproPortalCache" 
			maxElementsInMemory="0"
			maxElementsOnDisk="10000000" 
			eternal="true" 
			overflowToDisk="true"
			diskSpoolBufferSizeMB="50" />
			
	</ehcache>



5.其他ehcache.xml配置sample:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:noNamespaceSchemaLocation="ehcache.xsd" 
	updateCheck="true" monitoring="autodetect" dynamicConfig="true">
	
	<defaultCache
        maxElementsInMemory="10000"
        eternal="false"
        timeToIdleSeconds="120"
        timeToLiveSeconds="120"
        overflowToDisk="true"
        diskSpoolBufferSizeMB="30"
        maxElementsOnDisk="10000000"
        diskPersistent="false"
        diskExpiryThreadIntervalSeconds="120"
        memoryStoreEvictionPolicy="LRU"/>
	
	<!-- 缓存名sampleCache1,内存中最多可缓存10000个Element,其中的element会在闲置5分钟或是存活10分钟之后失效。
		 超过10000element时,element将会输出到磁盘中,输出路径是java.io.tmpdir。 -->
	<cache name="sampleCache1"
       maxElementsInMemory="10000"
       maxElementsOnDisk="1000"
       eternal="false"
       overflowToDisk="true"
       diskSpoolBufferSizeMB="20"
       timeToIdleSeconds="300"
       timeToLiveSeconds="600"
       memoryStoreEvictionPolicy="LFU"/>
	   
	<!-- Cache名为SampleCache2,内存中最多可以缓存1000个element,超出1000不能输出到磁盘中。缓存是永久有效的。 -->
	<cache name="sampleCache2"
       maxElementsInMemory="1000"
       eternal="true"
       overflowToDisk="false"
       memoryStoreEvictionPolicy="FIFO"/>
	
	<!-- Cache名为SampleCache3。可缓存到磁盘。磁盘缓存将会缓存虚拟机重启期的数据。磁盘缓存失效线程运行间隔时间是10分钟。 -->
	<cache name="sampleCache3"
       maxElementsInMemory="500"
       eternal="false"
       overflowToDisk="true"
       timeToIdleSeconds="300"
       timeToLiveSeconds="600"
       diskPersistent="true"
       diskExpiryThreadIntervalSeconds="1"
       memoryStoreEvictionPolicy="LFU"/>
	 
	 
	 
	<!-- Distributed Cache -->	
	 <cache name="sampleDistributedCache1"
       maxElementsInMemory="10"
       eternal="false"
       timeToIdleSeconds="100"
       timeToLiveSeconds="100"
	   overflowToDisk="false">
	   <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"/>
	   <bootstrapCacheLoaderFactory class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"/>
	</cache>
	
	<cache name="sampleDistributedCache2"
       maxElementsInMemory="10"
       eternal="false"
       timeToIdleSeconds="100"
       timeToLiveSeconds="100"
       overflowToDisk="false">
	   <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
            properties="replicateAsynchronously=false, 
						replicatePuts=false,
                        replicateUpdates=true, 
						replicateUpdatesViaCopy=true,
                        replicateRemovals=false"/>
	</cache>
	
	<cache name="sampleDistributedCache3"
       maxElementsInMemory="10"
       eternal="false"
       timeToIdleSeconds="100"
       timeToLiveSeconds="100"
       overflowToDisk="false">
       <cacheEventListenerFactory class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
            properties="asynchronousReplicationIntervalMillis=200"/>
	</cache>
</ehcache>



你可能感兴趣的:(Ehcache缓存配置)