Ehcache框架简单使用
2016-05-23 16:27
405 查看
内容逐渐添加中....
1. Ehcache框架使用需要的jar包有:ehcache-1.6.2jar,将其导入项目即可
2. 简单使用步骤:
2.1 首先在cache.xml中进行简单配置
2.2 其次使用EhcacheUtil类进行简单的put和get操作
2.3 简单的test demo
要注意的是,put方法的cacheName要和cache.xml中设置的cacheName一致,否则会报错Cahe is not alive.
另外cache.xml中一些参数:
diskStore :指定数据存储位置,可指定磁盘中的文件夹位置
defaultCache : 默认的管理策略
以下属性是必须的:
name: Cache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里)。
maxElementsInMemory: 在内存中缓存的element的最大数目。
maxElementsOnDisk: 在磁盘上缓存的element的最大数目,默认值为0,表示不限制。
eternal: 设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断。
overflowToDisk: 如果内存中数据超过内存限制,是否要缓存到磁盘上。
以下属性是可选的:
timeToIdleSeconds: 对象空闲时间,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问。
timeToLiveSeconds: 对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问。
diskPersistent: 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。
diskExpiryThreadIntervalSeconds: 对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。
diskSpoolBufferSizeMB: DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。
memoryStoreEvictionPolicy: 如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。
缓存的3 种清空策略 :
FIFO ,first in first out (先进先出).
LFU , Less Frequently Used (最少使用).意思是一直以来最少被使用的。缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。
LRU ,Least Recently Used(最近最少使用). (ehcache 默认值).缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
1. Ehcache框架使用需要的jar包有:ehcache-1.6.2jar,将其导入项目即可
2. 简单使用步骤:
2.1 首先在cache.xml中进行简单配置
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ehcache.xsd"> <diskStore path="D:/Logs/" /> <defaultCache maxElementsInMemory="500" eternal="false" timeToIdleSeconds="300" timeToLiveSeconds="1200" overflowToDisk="true" /> <cache name="testCache1" maxElementsInMemory="150" eternal="false" timeToLiveSeconds="36000" timeToIdleSeconds="3600" overflowToDisk="true"/> </ehcache>
2.2 其次使用EhcacheUtil类进行简单的put和get操作
package com.csl.nnn.common; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; public class EhcacheUtil { private static final String path = "D:/Logs/cache.xml"; private CacheManager manager; private static EhcacheUtil ehCache; private EhcacheUtil(String path) { manager = CacheManager.create(path); } public static EhcacheUtil getInstance() { if (ehCache== null) { System.out.println("is null"); ehCache= new EhcacheUtil(path); } return ehCache; } public void put(String cacheName, String key, Object value) { Cache cache = manager.getCache(cacheName); System.out.println("key and value:"+key+":"+value); if (cache==null){ System.out.println("cache is null"); cache=new Cache(cacheName,10000000,true,false,0,0); /** * 2->允许内存中缓存对象大小 * 3->允许内存达到最大后写入磁盘 true * 4->永久存储 true * 5、6->element存活时间无穷大 0,0 */ } Element element = new Element(key,value); System.out.println("element:"+element.toString()); cache.put(element); } public Object get(String cacheName, String key) { Cache cache = manager.getCache(cacheName); Element element = cache.get(key); return element == null?null:element.getObjectValue(); } public Cache get(String cacheName) { return manager.getCache(cacheName); } public void remove(String cacheName, String key) { Cache cache = manager.getCache(cacheName); cache.remove(key); } }
2.3 简单的test demo
package com.csl.nnn.common; import net.sf.ehcache.Cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; public class TestECache { public static void main(String[] argStrings){ //创建cache /* String fileName="D:/Logs/cache.xml"; CacheManager manager = CacheManager.create(fileName); Cache cache = new Cache("test", 1, true, false, 5, 2); manager.addCache(cache); Element element = new Element("key1", "value1"); cache.put(element); */ EhcacheUtil.getInstance().put("testCache1", "mtest1", "mcontent1"); EhcacheUtil.getInstance().put("testCache1", "mtest2", "mcontent2"); String value=EhcacheUtil.getInstance().get("testCache1", "mtest2").toString(); System.out.println("value:"+value); } }
要注意的是,put方法的cacheName要和cache.xml中设置的cacheName一致,否则会报错Cahe is not alive.
另外cache.xml中一些参数:
diskStore :指定数据存储位置,可指定磁盘中的文件夹位置
defaultCache : 默认的管理策略
以下属性是必须的:
name: Cache的名称,必须是唯一的(ehcache会把这个cache放到HashMap里)。
maxElementsInMemory: 在内存中缓存的element的最大数目。
maxElementsOnDisk: 在磁盘上缓存的element的最大数目,默认值为0,表示不限制。
eternal: 设定缓存的elements是否永远不过期。如果为true,则缓存的数据始终有效,如果为false那么还要根据timeToIdleSeconds,timeToLiveSeconds判断。
overflowToDisk: 如果内存中数据超过内存限制,是否要缓存到磁盘上。
以下属性是可选的:
timeToIdleSeconds: 对象空闲时间,指对象在多长时间没有被访问就会失效。只对eternal为false的有效。默认值0,表示一直可以访问。
timeToLiveSeconds: 对象存活时间,指对象从创建到失效所需要的时间。只对eternal为false的有效。默认值0,表示一直可以访问。
diskPersistent: 是否在磁盘上持久化。指重启jvm后,数据是否有效。默认为false。
diskExpiryThreadIntervalSeconds: 对象检测线程运行时间间隔。标识对象状态的线程多长时间运行一次。
diskSpoolBufferSizeMB: DiskStore使用的磁盘大小,默认值30MB。每个cache使用各自的DiskStore。
memoryStoreEvictionPolicy: 如果内存中数据超过内存限制,向磁盘缓存时的策略。默认值LRU,可选FIFO、LFU。
缓存的3 种清空策略 :
FIFO ,first in first out (先进先出).
LFU , Less Frequently Used (最少使用).意思是一直以来最少被使用的。缓存的元素有一个hit 属性,hit 值最小的将会被清出缓存。
LRU ,Least Recently Used(最近最少使用). (ehcache 默认值).缓存的元素有一个时间戳,当缓存容量满了,而又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出缓存。
相关文章推荐
- java基于poi模板excel导出
- MySQL之alter语句用法总结
- hello world
- iOS 的 APP 在系统中如何适配不同的屏幕的尺寸
- 从头到尾彻底理解KMP(2014年8月22日版)(转载)
- 设计一个有getMin功能的栈
- 认识JAVA数组
- iOS应用图标像素大小、图标命名要求、启动图等要求
- iOS 7的手势滑动返回功能
- (ZZ)CentOS yum 源的配置与使用
- cmd命令提示符大全(2)
- Android自助餐之XML
- 今日头条学习(1)_实现滑动标题栏
- Java虚拟机4:内存溢出
- android 启动界面
- 染色问题(n个格子,3种颜色)
- AJAX实现瀑布流触发分页与分页触发瀑布流的方法
- SQL的JOIN语法解析(inner join, left join, right join, full outer join的区别)
- N个免费DevOps开源工具,没用过,至少应该了解!
- 样本不均衡