ehcache缓存使用

来源:互联网 发布:巨人网络借壳上市方案 编辑:程序博客网 时间:2024/05/17 10:55

今天周末闲来没事,看了下自己项目中用的ehcache缓存使用,总线了一下以备后面其他项目中使用,有写得不对的地方还请大家纠正。

1.首先说下我的项目的环境,用的是java语言,spring3.0.7、hibernate3.3.2.GA、struts2。

2.在jar依赖的jar包都引入了的情况下,首先在src目录下新建一个ehcache.xml的配置文件,配置好缓存,内容如下:

<?xml version="1.0" encoding="UTF-8"?><ehcache><diskStore path="java.io.tmpdir" /><defaultCache maxElementsInMemory="10000" eternal="false"timeToIdleSeconds="120" timeToLiveSeconds="120" overflowToDisk="true"maxElementsOnDisk="10000000" diskPersistent="false"diskExpiryThreadIntervalSeconds="120" memoryStoreEvictionPolicy="LRU" /><cache name="defaultAllCache" maxElementsInMemory="10000" eternal="false"overflowToDisk="false" timeToIdleSeconds="21600" timeToLiveSeconds="43200"memoryStoreEvictionPolicy="LFU" /></ehcache>
xml中cache的属性解释如下:

  cache元素中可以指定的属性也有很多,但只有一个是必须的。那就是name属性。

       name:指定cache的名称。

       maxEntriesLocalDisk:指定允许在硬盘上存放元素的最大数量,0表示不限制。这个属性我们也可以在运行期通过CacheConfiguration来更改。

       maxEntriesLocalHeap:指定允许在内存中存放元素的最大数量,0表示不限制。这个属性也可以在运行期动态修改。

       maxEntriesInCache:指定缓存中允许存放元素的最大数量。这个属性也可以在运行期动态修改。但是这个属性只对Terracotta分布式缓存有用。

       maxBytesLocalDisk:指定当前缓存能够使用的硬盘的最大字节数,其值可以是数字加单位,单位可以是K、M或者G,不区分大小写,如:30G。当在CacheManager级别指定了该属性后,Cache级别也可以用百分比来表示,如:60%,表示最多使用CacheManager级别指定硬盘容量的60%。该属性也可以在运行期指定。当指定了该属性后会隐式的使当前CacheoverflowToDisktrue

       maxBytesLocalHeap:指定当前缓存能够使用的堆内存的最大字节数,其值的设置规则跟maxBytesLocalDisk是一样的。

       maxBytesLocalOffHeap:指定当前Cache允许使用的非堆内存的最大字节数。当指定了该属性后,会使当前CacheoverflowToOffHeap的值变为true,如果我们需要关闭overflowToOffHeap,那么我们需要显示的指定overflowToOffHeap的值为false。

       overflowToDisk:boolean类型,默认为false。当内存里面的缓存已经达到预设的上限时是否允许将按驱除策略驱除的元素保存在硬盘上,默认是LRU(最近最少使用)。当指定为false的时候表示缓存信息不会保存到磁盘上,只会保存在内存中。该属性现在已经废弃,推荐使用cache元素的子元素persistence来代替,如:<persistence strategy=”localTempSwap”/>。

       diskSpoolBufferSizeMB:当往磁盘上写入缓存信息时缓冲区的大小,单位是MB,默认是30。

       overflowToOffHeap:boolean类型,默认为false。表示是否允许Cache使用非堆内存进行存储,非堆内存是不受Java GC影响的。该属性只对企业版Ehcache有用。

       copyOnRead:当指定该属性为true时,我们在从Cache中读数据时取到的是Cache中对应元素的一个copy副本,而不是对应的一个引用。默认为false。

       copyOnWrite:当指定该属性为true时,我们在往Cache中写入数据时用的是原对象的一个copy副本,而不是对应的一个引用。默认为false。

       timeToIdleSeconds:单位是秒,表示一个元素所允许闲置的最大时间,也就是说一个元素在不被请求的情况下允许在缓存中待的最大时间。默认是0,表示不限制。

       timeToLiveSeconds:单位是秒,表示无论一个元素闲置与否,其允许在Cache中存在的最大时间。默认是0,表示不限制。

       eternal:boolean类型,表示是否永恒,默认为false。如果设为true,将忽略timeToIdleSeconds和timeToLiveSeconds,Cache内的元素永远都不会过期,也就不会因为元素的过期而被清除了。

       diskExpiryThreadIntervalSeconds :单位是秒,表示多久检查元素是否过期的线程多久运行一次,默认是120秒。

       clearOnFlush:boolean类型。表示在调用Cache的flush方法时是否要清空MemoryStore。默认为true。

       memoryStoreEvictionPolicy:当内存里面的元素数量或大小达到指定的限制后将采用的驱除策略。默认是LRU(最近最少使用),可选值还有LFU(最不常使用)和FIFO(先进先出)。

3.然后就是自己写的一个缓存处理业务类,代码如下:

package com.gosun.sysmgr.cache;import java.lang.management.ManagementFactory;import java.net.URL;import javax.management.MBeanServer;import net.sf.ehcache.Cache;import net.sf.ehcache.CacheManager;import net.sf.ehcache.Element;import net.sf.ehcache.management.ManagementService;/** * Ehcache 缓存管理 * */public class EhcacheManager {/** * 缓存manager */private static CacheManager manager;/** * 缓存service */private static ManagementService service;/** * 默认缓存 */public final static String DEFAULT_CACHE_NAME = "defaultAllCache";/** * 数据字段缓存 */public final static String DATA_CACHE_KEY = "data_key_";static {URL url = EhcacheManager.class.getResource("/ehcache.xml");manager = CacheManager.create(url);MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();service = new ManagementService(manager, mBeanServer, true, true, true, true);service.init();}/** * 清空缓存 */public static void removeAll() {getCache().removeAll();}/** *  * @param key */public static void remove(String key) {getCache().remove(key);}/** * 设置element * @param key * @param object */public static void put(String key, Object object) {Element el = new Element(key, object);getCache().put(el);}/** *  * @param key * @return */public static Object get(String key) {Element el = getCache().get(key);if (el != null) {return el.getValue();}return null;}/** * 获取缓存 * @return */public static Cache getCache() {return manager.getCache(DEFAULT_CACHE_NAME);}/** * 注销所有的bean */public void unregisterMBean() {if (service != null) {service.dispose();}}}
4.写好业务处理类后,就可以使用缓存来缓存数据了,下面是使用例子:

EhcacheManager.put(EhcacheManage.DATA_CACHE_KEY, list);
好了,写完了,希望能对大家使用缓存有点帮助。

0 0
原创粉丝点击