最近项目中需要使用Cache来控制程序运行中占用内存大小, 搜索了一下, JCS和Ehcache使用比较简单.
Java 缓存系统(Java Caching System,JCS)
是一个用于
Java 应用程序的强大分布式缓存系统,它是拥有简单 API 的高度可配置的工具。具体使用方法如下:
首先需要一个重要的配置文件, cache.ccf
基本配置:
jcs.default=jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
该配置文件将内存缓存指定为一个
LRUMemoryCache
。还可以看到,内存中能保存的对象的最大数量被设置为
1000
。
JCS 配置中定义的区域:
jcs.default=DISK_REGION
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=1000
jcs.default.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.OUR_REGION=DISK_REGION
jcs.region.OUR_REGION.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.region.OUR_REGION.cacheattributes.MaxObjects=1000
jcs.region.OUR_REGION.cacheattributes.MemoryCacheName=org.apache.jcs.engine.memory.lru.LRUMemoryCache
jcs.region.OUR_REGION.cacheattributes.UseMemoryShrinker=true
jcs.region.OUR_REGION.cacheattributes.MaxMemoryIdleTimeSeconds=3600
jcs.region.OUR_REGION.cacheattributes.ShrinkerIntervalSeconds=60
jcs.region.OUR_REGION.cacheattributes.MaxSpoolPerRun=500
jcs.region.OUR_REGION.elementattributes=org.apache.jcs.engine.ElementAttributes
jcs.region.OUR_REGION.elementattributes.IsEternal=false
jcs.auxiliary.DISK_REGION=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
jcs.auxiliary.DISK_REGION.attributes=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheAttributes
jcs.auxiliary.DISK_REGION.attributes.DiskPath=c:/jcs/disk_region
jcs.auxiliary.DISK_REGION.attributes.maxKeySize=100000
第一行表明该配置将默认区域设置为
DISK_REGION
。
DISK_REGION
是
IndexedDiskCacheFactory
类型,并且该文件在磁盘上指定为 c:\jcs\disk_region。第二个配置组定义了我自己的区域,我为它添加了一些选项,这种类型的配置(在指定用户定义区域时同时使用内存区域和磁盘区域)是很常见的。第 3 个配置组定义了一个 辅助区域 。
JCS 有两个依赖项:concurrent
和 commons-logging
(JCS 1.2.7.0 之前的版本中,还有两个其他依赖项:commons-collections
和 commons-lang
)。
JCS 的基本用法:
Initialize the JCS object and get an instance of the default cache region
JCS cache = JCS.getInstance("default");
JCS 实例后,可以调用最需要的方法。put
方法将一个新对象放入缓存中。接下来只需一个 key
(第一个参数)和一个 value
(第二个参数):
cache.put(key, value);
检索缓存对象只使用 JCS 提供的 get
方法:
cache.get(key);
清除缓存区域:
// Dispose of a specific cached item
cache.remove(key);
// Dispose of all cache data
cache.clear();
// Dispose of the cache region
cache.dispose();
在使用JCS时候, 我们经常会把对象放入缓存中, 这里需要注意要实现序列化.
EHCache使用简介
EHCache 是一个纯java的,在Hibernate2.1充当可插入的的在进程中的缓存,它具有以下缓存,最小的依赖性,全面的文特性:快速,简单,丰富的文档和测试用例。
官方网站 http://ehcache.sourceforge.net/
在使用EhCache也需要一个配置文件, 但现在版本你也可以不需要配置文件, 在创建Cache时候传一些配置值给它就可以了.
首先需要创建一个CacheManager 对象, 有四种方式:
方法一, 默认配置文件创建:
CacheManager manager = CacheManager.create();
方法二, 使用指定配置文件创建:
CacheManager manager = CacheManager.create("src/config/ehcache.xml");
方法三, 从classpath找寻配置文件并创建:
URL url = getClass().getResource("/anotherconfigurationname.xml");
CacheManager manager = CacheManager.create(url);
方法四, 通过输入流创建:
InputStream fis = new FileInputStream(new File("src/config/ehcache.xml").getAbsolutePath());
try {
CacheManager manager = CacheManager.create(fis);
} finally {
fis.close();
}
卸载CacheManager ,关闭Cache
manager.shutdown();
使用Caches
取得配置文件中预先 定义的sampleCache1设置,生成一个Cache
Cache cache = manager.getCache("sampleCache1");
设置一个名为test 的新cache,test属性为默认
CacheManager manager = CacheManager.create();
manager.addCache("test");
设置一个名为test 的新cache,并定义其属性
CacheManager manager = CacheManager.create();
Cache cache = new Cache("test", 1, true, false, 5, 2);
manager.addCache(cache);
往cache中加入元素
Element element = new Element("key1", "value1");
cache.put(new Element(element);
从cache中取得元素
Element element = cache.get("key1");
Cache 属性说明:
构造函数:
public Cache(java.lang.String name, int maxElementsInMemory, boolean overflowToDisk, boolean eternal, long timeToLiveSeconds, long timeToIdleSeconds)
参数说明:
name - 元素名字。
maxElementsInMemory - 设定内存中创建对象的最大值。
overflowToDisk - 设置当内存中缓存达到 maxInMemory 限制时元素是否可写到磁盘上。
eternal - 设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超时限制且元素永不消亡。
timeToIdleSeconds - 设置某个元素消亡前的停顿时间。也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则 设置该属性也无用)。 如果该值是 0 就意味着元素可以停顿无穷长的时间。
timeToLiveSeconds - 为元素设置消亡前的生存时间。也就是一个元素从构建到消亡的最大时间间隔值。这只能在元素不是永久驻留时有效。
ehcache.xml配置文件中的属性和构造方法里面意思一样.
posted on 2009-05-13 22:28
周锐 阅读(1336)
评论(0) 编辑 收藏 所属分类:
Java