EhCache的使用

先来说说ehcache,目前的版本为1.2,已经支持集群了。对于ehcache的使用,感觉很容易上手,基本上都是配置。以前在hibernate的时候配置过,所以也不是很陌生。API也挺简单,CacheManager 是主要的缓存管理类,一般一个应用为一个实例,CacheManager.create() 或者使用 new CacheManager()的方式创建。默认的配置文件为 classes/ehcache.xml 文件,也可以指定其它的配置路径。

常见的 API 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
CacheManager manager = new CacheManager('src/config/other.xml');   

// 缓存的创建,采用自动的方式

CacheManager singletonManager = CacheManager.create();
singletonManager.addCache('testCache');
Cache test = singletonManager.getCache('testCache');

// 或者直接创建Cache

CacheManager singletonManager = CacheManager.create();
Cache memoryOnlyCache = new Cache('testCache', 5000, false, false, 5, 2);
manager.addCache(memoryOnlyCache);
Cache test = singletonManager.getCache('testCache');

// 删除cache

CacheManager singletonManager = CacheManager.create();
singletonManager.removeCache('sampleCache1');

// 在使用ehcache后,需要关闭

CacheManager.getInstance().shutdown()

// caches 的使用

Cache cache = manager.getCache('sampleCache1');

// 执行crud操作

Cache cache = manager.getCache('sampleCache1');
Element element = new Element('key1', 'value1');
cache.put(element);

// update

Cache cache = manager.getCache('sampleCache1');
cache.put(new Element('key1', 'value1');
//This updates the entry for 'key1'
cache.put(new Element('key1', 'value2');

// get Serializable

Cache cache = manager.getCache('sampleCache1');
Element element = cache.get('key1');
Serializable value = element.getValue();

// get non serializable

Cache cache = manager.getCache('sampleCache1');
Element element = cache.get('key1');
Object value = element.getObjectValue();

// remove

Cache cache = manager.getCache('sampleCache1');
Element element = new Element('key1', 'value1'
cache.remove('key1');

配置示例

一个典型的Ecache的配置文件应该如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<ehcache>

<diskStore path="java.io.tmpdir"/>
<defaultCache
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="true"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"
/>

<cache name="Test"
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="2"
timeToLiveSeconds="600"
memoryStoreEvictionPolicy="LRU"
/>

</ehcache>

参数说明

  • name:元素名称
  • maxElementsInMemory:设定内存中创建对象数量的最大值;
  • overflowToDisk: 设置当内存中缓存达到 maxInMemory 限制时元素是否可写到磁盘上;
  • eternal:设置元素(译注:内存中对象)是否永久驻留。如果是,将忽略超时限制且元素永不消亡;
  • timeToIdleSeconds:设置某个元素消亡前的停顿时间。也就是在一个元素消亡之前,两次访问时间的最大时间间隔值。这只能在元素不是永久驻留时有效(译注:如果对象永恒不灭,则设置该属性也无用)。如果该值是 0 就意味着元素可以停顿无穷长的时间。
  • timeToLiveSeconds:为元素设置消亡前的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,N秒后消亡。这只能在元素不是永久驻留时有效。