-
Ehcache
使用文档
作者:兰东平
Email
2
0
1
2
年
2
月
1
基本介绍
1.1
前言
Ehcache
是一个快速的、轻量级的、易于使用的、进程内
的缓存。它支持
read-only
和
read/write
缓存,
p>
内存和磁盘缓存。
是一个非常轻量级的缓存实现,
< br>而且从
之后就支持了集群,目前的最新版本是。
简单地说来,
ehcache
有以下特点:
快速
.
简单
.
多种缓存策略
缓存数据有两级:内存和磁盘,因此无需担心容量问题
缓存数据会在虚拟机重启的过程中写入磁盘
可以通过
RMI
、可插入
API
等方式进行分布式缓存
具有缓存和缓存管理器的侦听接口
支持多缓存管理器实例,以及一个实例的多个缓存区域
提供
Hibernate
的缓存实现
2
安装和使用
2.1
下载
Ehcache
的官方网站
downl
oads/catalog
上面可以下载到各种版本。
目前用
最
新版本是,下载这个版本即可。
(
下
载之前,会要求用户注册,按照要求输入即
可
)
。
建议下载文件,因为这个文件包含了所有
Ehcache
的内容。
2.2
安装
2.2.1
发布包内容说明
将解压到本地文件系
统。
在安装之前,
我们先来大致看看发布包里边的内容,
如下图所示。
图
如一般的开源框架发布包类似,<
/p>
ehcahce
的发布包包含以下目录内容:
javadoc
:
ehcach
e
的
API
文档;
lib
:
ehcache
要用到的第三方
jar
包和自己的
jar
包;
licen
ses
:
ehcache
的授权文件;
samples
:
< br>ehcache
的例子目录;
src
:
ehcache
的源代码目录
;
terracotta
:使用
p>
terracotta
集群时的
terra
cotta
服务;
:
ehcache
的配置文件模板,包括各个配置的英文解释;
< br>
:文件的验证文件模板;
:
快速开始文件,会连接到
ehcache
的官方网站;
:
ehcache
版
本功能和新特性说明文件。
除了阅读本文档快速地学习和了解
ehcache
的功能,也可以通过
e
hcache
自
带的快速开始文件进行学习。
< br>
2.2.2
安装到项目工程
Ehcache
p>
的安装方法比较简单,将解压开的发布包下的
lib
/
、
lib /
和
lib/
放置
到类路径下面即可使用。如下图所示:
图
p>
其中,和两个
jar
包,用于
ehcache
的日志输出,是第三方
jar
包。关于这两
个
jar
包的用法和功能特性,请查阅
slf4j
框架的相关功能。<
/p>
3
开始一个例子
3.1
新建一个空的
java
project
工程
通过
eclipse
向导新建一个
Java
Project
工程
ehcache-test
,
并将上面提的三个
类添加到类路径下。工程如下图所
示:
图
p>
其中的
lib
目录,我专门用来存放
jar
包。
3.2
工程中添加配置文件
3.2.1
新建配置文件存放目录
在
ehcache-test
工程中新
建专门用于存放配置文件的包,根据我们的习惯,
该包取名为“
conf
”
。
3.2.2
加入
ehcache
配置文件
在刚才
新建的
conf
包下加入发布包目录下的和两个配置文件。
p>
(
注意,这两
个配置文件要放在同一目录下
。
如果需要将文件放到其他目录,
需要修改文件中
的
xsi:noNamespaceSchemaLocation=
配置项
)
经过以上步骤操作,工程目录结构如下图所示:
3.2.3
修改配置文件内容
正如先前所述,<
/p>
是
ehcache
的配置文件模板,
p>
每一项配置的说明都相当详细。
在修改该配置文件之前,如果大家有
兴趣,不妨先大致看看其中的内容和注释。
为了说明简单,我
们先运行
ehcache
最基本和简单的例子。配置文件内容如
下:
<
xml
v
ersion
=
encoding
=
>
<
ehcache
< br>xmlns:xsi
=
<
cache
name
=
maxEntriesLocalHeap
=
< br>
maxEntriesLocalDisk
< br>=
eternal
=
overflowT
oDisk
=
diskSpoolBufferSizeMB
=
timeToIdleSeconds
=
timeToLiveSeconds
p>
=
memory
StoreEvictionPolicy
=
< br>
transactionalMode
=
/>
ehcache
>
<
defaultCache
maxEntriesLocalHeap
=
eternal
=
< br>
overflowToDi
sk
=
ti
meToIdleSeconds
=
timeToLiveSeconds
=
>
d
efaultCache
>
xsi:
noNamespaceSchemaLocation
=
p>
updateCheck
=
monitoring
=
dynamicConfig
=
>
经过以上步骤操作,我们的工程如下图所示:
图
3.3
编写测试类
新建名为“
ehcache
”的包。在“
ehcache
”包下面新建“”类。
文件内容使用
Junit
来编写,所以我们还需要在工程中添加
Junit4
。的内容
很简单,如下:
package
ehcache;
import
*
*
@author
ldp
*
*/
public
class
TestMain {
}
}
Element
element1 =
new
Element(key,
value);
(element1);
();
Cache cache1 =
(
);
String key =
;
String value = () +
;
@Test
public
void
testF1()
throws
Exception
{
URL url =
);
CacheManager manager =
new
CacheManager(url);
以上是一个很简单的测试类,稍后我们再对代码进行分析。
3.4
运行测试类
运行上面的类,输出结果如下:
3.5
代码解析
下面主要对中的
testF1()
方法进行详细地解析。
代码片段
1
:
URL
url =
);
CacheManager manager =
new
CacheManager(url);
这两行代码根据
p>
conf/
配置文件新建出一个
Cache
Manager
对象。也就是说,
一
个
文
件
就
对
p>
应
一
个
Cache
Manager
对
象
,
中
配
置
的
各
个
缓
存
,
即
为
该
Ca
cheManager
对象实际管理和控制的
cache
对象。
代码片段
2
:
Cache cache1 = (
通过
CacheManager
对象获取其中的指定缓存
(sampleCache1)
。
每个缓存以
其
name
属性来区分。
代码片段
3
:
String key =
;
String value = () +
;
新建一个键值对。
代码片段
4
:
Element element1 =
new
Element(key,
value);
(element1);
新建一个<
/p>
Element
对象,该对象以刚才的键值对为数据;再将
Element
对象放入到缓存
sample
Cache1
中;
再从缓存
sampl
eCache1
中根据键取出存入其
中的
Element
对象。
代码片段
5
:
();
关闭
CacheManager
对象,程序运行结束。
4
Ehcache
的基本原理
通过以上的一个简单的例子,我们已经大体了解了一些
Ehcache<
/p>
的原理。接
下来,我们再比较详细地了解下
Ehcache
的原理。
4.1
整体结构
Ehcache
的类层次模型主要为三层,最上层的是
CacheManager
,他是操作
Ehcache
的入口。我们可以
通过
()
获得一个单个的
CacheM
anager
,或者通过
CacheManager
的构造函数创建一个新的
CacheManager
。每个
CacheManager
都
管理着多个
Cache
。
而每个
Cache
都以一种类
Hash
的方式,
关联着多个
Elemenat
。
而
Element
则是我
们用于存放要缓存内容的地方。
Ehcache
的整体结构图如下图所示。
图
ehcache
的刷新策略
ehcache
的刷新策略是当缓存在放入的时候记录一个放入时间,它
是用
Lazy
Evict
的方式,在
取的时候同设置的
TTL
比较。
p>
ehcache
缓存的
3
< br>种清空策略:
FIFO
,先进先出
LFU
,最少被使用,缓存的元素有
一个
hit
属性,
hit
值最小的将会被清出
缓存。
LRU
,最近最少使用的,缓存的元
素有一个时间戳,当缓存容量满了,而
又需要腾出地方来缓存新的元素的时候,那么现有
缓存元素中时间戳离
当前时间最远的元素将被清出缓存。
事件处理
可以为
CacheManager
添加事件监听,当对
Cache
Manager
增删
Cache
时,<
/p>
事件处理器将会得到通知。要配置事件处理,
需要通过
ehcache
的配置文件来完
成。
可以为
Cache
添加事
件监听,当对
Cache
增删
Elem
ent
时,事件处理器将会
得到通知。要配置事件处理,需要通
过
ehcache
的配置文件来完成。
4.2
CacheManager
如上文所
述,
CacheManager
是操作
Ehcache
的入口。其类结构如下:
对于
CacheManager
p>
,我么重点了解它的构造函数。我们可以有两种模式来
创建
CacheManager
,单例
(Singl
eton)
和多例
(Instance)
。
单例创建
CacheManag
er
是指通过
()
方法或者无参的构造
函数
CacheManager()
创建一个
< br>CacheManager
对象。
这种情况下,系统会在
最顶层的
classpath
路径下
找
名叫的配置文件,
如果查找失败,
会以包中的文件
(里边的缓存配置极其简单)
替代。同时,一个警告会提醒用户建立自己的配
置文件。
测试代码(添加在
ehcache-
test
工程的中,以下同是)
:
@Test
public
void
testF2()
throws
Exception
{
CacheManager
manager = new CacheManager();
(
Cache cache1 =
(
String key =
String value = () +
;
Element element1 =
new
Element(key,
value);
(element1);
}
();
执行结果如下图所示:
图
同时,我们也可以看到,当我们用
代码“
(
”向
CacheManage
r
中加入缓存时,系统会自动用中的
项的配置创建出一个
name
为<
/p>
“
sampleCache1
”的
cache
。
多例
创建
CacheManager
的方法和先前的
testF1()
方法一致。
CacheManage
r
支持多种方式创建:
Configuration
对象、
InputStream
对象、
配置文件路径字符串
和
URL
对象。如果大家有兴趣,都可以去尝试一下。
特别地,<
/p>
对于多例创建
CacheManager
,
我们需要指定
CacheManager
的
name
属性,系统不允许多个相同
name
的
CacheManager
存在;另外,对于一些资源,
如当设置了
cache
内存占用空间满了后,就将缓存数据存放到物理硬盘上
(Cache<
/p>
的
overflowToDisk
属性<
/p>
)
,
每个
Cac
heManager
对象的
diskStore
配置路径不能有重
复。关于
diskStore
的详细配置说明,请参照模板文件。
4.3
Ehcache
接口
所有的
cache
都实现此接口,每个
cache
有自己的
name
和其他属性,
cache
中存放
Ele
ment
对象数据。
Cache
中的<
/p>
Element
对象一般存储在
Memo
ryStore
里
边,我们也可以配置将其存储到
DiskStore
配置指定的文件路径下边。该接口的
结构如下:
-
-
-
-
-
-
-
-
-
上一篇:中英文对照常见办公用品目录
下一篇:印刷术语中英文对照