EHcache缓存框架详解

时间:2022-12-18 09:51:37

EhCache是一个纯Java的进程内缓存框架,具有快速、精干等特点,也是Hibernate中默认的CacheProvider。 
归纳一下它大概具有一下几个特点: 
1. 快速. 
2. 简单. 
3. 多种缓存策略 
4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 
5. 缓存数据会在虚拟机重启的过程中写入磁盘 
6. 可以通过RMI、可插入API等方式进行分布式缓存 
7. 具有缓存和缓存管理器的侦听接口 
8. 支持多缓存管理器实例,以及一个实例的多个缓存区域 
9. 提供Hibernate的缓存实现

那么我们在开发中到底如何运用EhCache框架呢?

获取Ehcache相关jar包及帮助文档。

下载地址: http://ehcache.org/code

相关文档地址: http://ehcache.org/apidocs/

/**
* maxElementsInMemory:缓存中允许创建的最大对象数
* eternal:缓存中对象是否为永久的,如果是,超时设置将被忽略,对象从不过期。
* timeToIdleSeconds:缓存数据的钝化时间,也就是在一个元素消亡之前,两次访问时间的最大时间间隔值, 这只能在元素不是永久驻留时有效,
* 如果该值是 0 就意味着元素可以停顿无穷长的时间。
* timeToLiveSeconds:缓存数据的生存时间,也就是一个元素从构建到消亡的最大时间间隔值,这只能在元素不是永久驻留时有效,
* 如果该值是0就意味着元素可以停顿无穷长的时间。 overflowToDisk:内存不足时,是否启用磁盘缓存。
* memoryStoreEvictionPolicy:缓存满了之后的淘汰算法
*
* @param args
*/
public static void main(String[] args) {
// 创建一个缓存管理器对象
CacheManager cacheManager = CacheManager.create();
// 命名缓存管理器
cacheManager.setName("testCacheManager");
// 创建一个指定缓存名称的缓存对象
Cache cache = new Cache("testCache", 4, false, false, 1, 1);
// cache.setDisabled(true);
// 将缓存对象添加至缓存管理器
cacheManager.addCache(cache); // cacheManager.shutdown(); System.out.println("判断缓存管理器中是否存在指定的缓存对象:"
+ cacheManager.cacheExists("testCache"));
DiskStorePathManager disStoreManager = cacheManager
.getDiskStorePathManager();
System.out.println("获取当前配置文件硬盘路径:"
+ disStoreManager.getFile("testCache.xml")); Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "tom");
map.put("sex", "男");
map.put("age", 1);
// 注意:如果当前缓存对象设置了内存中最大缓存keyValue对象的话,如果超出时,则后面的覆盖前面的keyValue对象
cache.put(new Element("cache1", map));
cache.put(new Element("cache2", map));
cache.put(new Element("cache3", map)); Element element = new Element("cache4", map);
element.setTimeToLive(1); cache.put(element); String[] cacheNames = cacheManager.getCacheNames();
for (int i = 0; i < cacheNames.length; i++) {
System.out.println("缓存" + i + ":" + cacheNames[i]);
} // System.out.println("当前活动的缓存配置文件内容:\n"
// + cacheManager.getActiveConfigurationText());
System.out.println("缓存管理器对象是否命名:" + cacheManager.isNamed()); Cache testCahe = cacheManager.getCache("testCache"); System.out.println("缓存的状态:" + testCahe.getStatus());
System.out.println("缓存对象平均获取时间:" + testCahe.getAverageGetTime());
System.out.println("获取缓存对象占用内存空间大小:" + testCahe.getMemoryStoreSize());
System.out.println("获取缓存对象大小:" + testCahe.getSize());
System.out.println("缓存是否关闭:" + testCahe.isDisabled());
System.out.println("判断某一个缓存key是否存在在缓存中"
+ testCahe.isKeyInCache("cache3"));
System.out.println("判断某一个缓存值是否缓存在对象中:" + testCahe.isValueInCache(map)); // 验证缓存对象是否禁用
if (!testCahe.isDisabled()) {
System.out.println("判断缓存中某个对象是否过期:"
+ testCahe.isExpired(testCahe.get("cache3")));
} else {
System.out.println(testCahe.getName() + "缓存已关闭");
}
System.out.println("判断某一个key是否缓存在内存中:"
+ testCahe.isElementInMemory("cache1"));
System.out.println("判断某一个key是否缓存在磁盘中:"
+ testCahe.isElementOnDisk("cache1")); System.out.println("\n"); List cacheKey = cache.getKeys();
for (int i = 0; i < cacheKey.size(); i++) {
Element cacheElement = testCahe.get(cacheKey.get(i));
System.out.println("Key:" + cacheKey.get(i) + ",value:"
+ cacheElement.getObjectValue());
}
}

EHcache缓存框架详解的更多相关文章

  1. mina框架详解

     转:http://blog.csdn.net/w13770269691/article/details/8614584 mina框架详解 分类: web2013-02-26 17:13 12651人 ...

  2. &lbrack;Cocoa&rsqb;深入浅出 Cocoa 之 Core Data(1)- 框架详解

    Core data 是 Cocoa 中处理数据,绑定数据的关键特性,其重要性不言而喻,但也比较复杂.Core Data 相关的类比较多,初学者往往不太容易弄懂.计划用三个教程来讲解这一部分: 框架详解 ...

  3. iOS 开发之照片框架详解&lpar;2&rpar;

    一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLib ...

  4. mapreduce框架详解

    hadoop 学习笔记:mapreduce框架详解 开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感 ...

  5. iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

    本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...

  6. iOS 开发之照片框架详解

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework.html 一. 概要 在 iOS 设备中,照片和视频是相当重 ...

  7. iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...

  8. hadoop框架详解

    Hadoop框架详解 Hadoop项目主要包括以下四个模块 ◆ Hadoop Common: 为其他Hadoop模块提供基础设施 ◆ Hadoop HDFS: 一个高可靠.高吞吐量的分布式文件系统 ◆ ...

  9. Spark2&period;1&period;0——内置Web框架详解

    Spark2.1.0——内置Web框架详解 任何系统都需要提供监控功能,否则在运行期间发生一些异常时,我们将会束手无策.也许有人说,可以增加日志来解决这个问题.日志只能解决你的程序逻辑在运行期的监控, ...

随机推荐

  1. C&num;学习笔记-图像处理篇(一)绘制公章

    上个月免费帮别人做事,就一直在服务员和程序员中来回切换,所以好多事情都弄得乱糟糟的,家里也是乱七八糟的,所以学习这一块也放了一段时间. 刚刚开始当服务员的时间看到了形形色色的人,觉得很好玩,他们每个人 ...

  2. ipython notebook设置工作路径和自动保存&period;py文件 ipython&lowbar;notebook&lowbar;config&period;py

    在安装完Anaconda,选择了配置环境变量后,打开cmd命令行 1. 打开命令行, 键入 ipython profile create 2. 键入 , 根据这个地址, 打开profile所在的文件夹 ...

  3. 【BZOJ】【3530】【SDOI2014】数数

    AC自动机/数位DP orz zyf 好题啊= =同时加深了我对AC自动机(这个应该可以叫Trie图了吧……出边补全!)和数位DP的理解……不过不能自己写出来还真是弱…… /************* ...

  4. XStream和Json

    XStream的作用 XStream可以把JavaBean对象转换成XML! 通常服务器向客户端响应的数据都是来自数据库的一组对象,而我们不能直接把对象响应给响应端,所以我们需要把对象转换成XML再响 ...

  5. SharedPreferences共享优先存储的详细解析和原理

    共享优先存储: publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCont ...

  6. IntelliJ Idea设置默认换行符

    IntelliJ换行CRLF, LF, CR的解释和默认设置 在window下开发有一个大坑,就是换行默认是CRLF,也就是回车换行,但是Linux下只有换行LF,这样代码提交后,会出现编译问题,所以 ...

  7. Thinkphp3&period;2&period;3框架下封装公共的函数,例如封装CURL函数来获取接口数据

    当我们需要在控制层调用相同的封装函数时,写多次相同的函数,显得代码十分的拉杂,不精简: TP框架有一个很好的机制,可以再Common定义一个function.php函数,当我们在控制层调用的时候直接调 ...

  8. CSS相关

    ===CSS框架=== https://github.com/lucasgruwez/waffle-grid 一个易于使用的 flexbox 栅格布局系统 ===CSS初始化=== https://g ...

  9. 一天一个Linux命令--nmcli

    nmcli命令连接和删除SSID nmcli d wifi                                                                        ...

  10. Spark面试题

    RDD怎么理解? RDD 是 Spark 的灵魂,也称为弹性分布式数据集.一个 RDD 代表一个可以被分区的只读数据集.RDD 内部可以有许多分区(partitions),每个分区又拥有大量的记录(r ...