◎筱米加步枪◎.Blog

Happy coding

EhCache基础知识学习笔记

项目需要,稍微过了一下有关EhCache缓存框架的知识.

简单介绍下EhCache:EhCache 是一个纯Java的进程内缓存框架,具有快速、精干等特点.

一些不太经常变化的数据可以放入缓存,需要时候直接从缓存获取,可以提供系统的性能.

具体来看一下ehcache的知识吧.

ehcache需要一个xml配置文件:

内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<!-- 缓存数据文件创建的地方,java.io.tmpdir是默认的临时文件路径 -->
<diskStore path="java.io.tmpdir"/>

	    <!-- Sets the path to the directory where cache .data files are created. 
	    	  设置为缓存的地方。数据文件创建的目录的路径

	         If the path is a Java System Property it is replaced by 
	         its value in the running VM.
	                        如果路径是Java系统属性中被替换其值在运行虚拟机。
	         
	         
	         The following properties are translated:下列属性换算
	         user.home - User's home directory           用户的主目录
	         user.dir - User's current working directory 用户的当前工作目录
	         java.io.tmpdir - Default temp file path     默认临时文件路径
	    <diskStore path="java.io.tmpdir"/> -->
	    
	    <!--Default Cache configuration. These will applied to caches programmatically created through
	        the CacheManager.
		默认的缓存配置。这将适用于通过编程方式创建缓存在CacheManager。
	
	        The following attributes are required: 下面的属性是必需的
	
	        maxElementsInMemory            - Sets the maximum number of objects that will be created in memory 
                                                 设置对象的最大数量,将在内存中创建
	        eternal                        - Sets whether elements are eternal. If eternal,  timeouts are ignored and the
	                                         element is never expired. 
	                                         设置元素是否是永恒的。如果永恒的,超时被忽略,并且元素是永远不会过期(缓存是否永远不销毁)
	        overflowToDisk                 - Sets whether elements can overflow to disk when the in-memory cache
	                                         has reached the maxInMemory limit.
	                                         设置当缓存中的数据达到最大值时,是否把缓存数据写入磁盘
	
	        The following attributes are optional: 以下属性是可选的
	        timeToIdleSeconds              - Sets the time to idle for an element before it expires.
	                                         i.e. The maximum amount of time between accesses before an element expires
	                                         Is only used if the element is not eternal.
	                                         Optional attribute. A value of 0 means that an Element can idle for infinity.
	                                         The default value is 0.
	                                         设置 当缓存闲置指定时间,当闲置时间到达指定时间时,缓存则自动销毁,可选的属性。
                                                 0值表示一个元素可以闲置无穷。默认值是0
	                                         
	        timeToLiveSeconds              - Sets the time to live for an element before it expires.
	                                         i.e. The maximum time between creation time and when an element expires.
	                                         Is only used if the element is not eternal.
	                                         Optional attribute. A value of 0 means that and Element can live for infinity.
	                                         The default value is 0.
                                                 设置当缓存创建之后到达的指定时间,当缓存生存超过指定的时间,缓存则自动销毁
                                                 可选的属性。0值表示和元素可以活无限。默认值是0
	        diskPersistent                 - Whether the disk store persists between restarts of the Virtual Machine.
	                                         The default value is false.
                                                 无论是磁盘存储之间仍然存在的虚拟机重新启动。默认值是false
	        diskExpiryThreadIntervalSeconds- The number of seconds between runs of the disk expiry thread. The default value
	                                         is 120 seconds.
                                                 磁盘之间的到期线程运行的秒数。默认值是120秒
	        -->
	        
    <defaultCache
        maxElementsInMemory="100000"
        eternal="false"
        overflowToDisk="true"
        timeToIdleSeconds="60" 
        timeToLiveSeconds="120"
        />

	<cache name="systemConfigCache"
       maxElementsInMemory="100000"
       eternal="false"
       overflowToDisk="true">
    </cache>

</ehcache>

以上的一些翻译是结合google翻译和一些自己的理解.ehcache涉及的配置元素和属性说明都在上头了.

以下是Java代码部分,描述了一些关于Ehcache的简单使用和一些API,具体其他的API就参考具体文档咯..

//必须导入commons-logging.jar
public class EhCache {
	
	//默认缓存配置路径
	public static String DEFAULT_CACHE_CONFIG_PATH = "conf/ehcache.xml";
	
	public static void main(String[] args) {
		//使用指定的配置文件路径创建缓存管理器
		CacheManager cacheManager = new CacheManager(DEFAULT_CACHE_CONFIG_PATH);
		//获取配置的缓存Cache名字
		String [] cacheNames = cacheManager.getCacheNames();
		
		//会在当前classpath中去寻找ehcache.xml配置文件
		CacheManager cacheManager1 = new CacheManager(); 
		//或者 CacheManager.getInstance(); 
		//或者CacheManager.create();

		//由缓存管理器中获得缓存,可以是配置在文件中的缓存也可以是代码中new出来的.
		Cache cache = cacheManager.getCache("systemConfigCache");
		
		//数据放入缓存
		cache.put(new Element("key", "value"));

		//更新缓存数据
		cache.put(new Element("key","value2"));
		
		//获取缓存的值(序列画值)
		Element element = cache.get("key");
		Serializable value = element.getValue();
		
		//获取缓存的值(对象值)
		Object object = element.getObjectValue();
		
		//移除缓存数据
		cache.remove("key");

		//取得缓存中的属性maxElementsInMemory,其他的值类似
		int maxelementsInMemory = cache.getMaxElementsInMemory();
		
		String name = "codeCreateCache";  //缓存名字
		int maxElementsInMemory = 1000;   //缓存可以存储的总记录量
		boolean overflowToDisk = false;   //当缓存中的数据达到最大值时,是否把缓存数据写入磁盘
		boolean eternal = true;           //缓存是否永远不销毁
		long timeToLiveSeconds = 60;      //当缓存闲置指定时间,则自动销毁
		long timeToIdleSeconds = 120;     //当缓存创建之后到达时间自动销毁
		
		//代码中创建缓存
		Cache cache2 = new Cache(name, maxElementsInMemory, overflowToDisk, eternal, timeToLiveSeconds,
				timeToIdleSeconds);
		
		//添加缓存
		cacheManager.addCache(cache2);
		
		//移除缓存
		cacheManager.removeCache("systemConfigCache");
		
		//卸载缓存管理器
		cacheManager.shutdown();
	}
}

使用起来还是挺方便的,如果有其他需要也可以基于上面封装满足自己的缓存框架.