结构
缓存就是存储数据(使用频繁的数据)的临时地方,如果取原始数据的代价太大。
EHCache缓存数据有两级:内存和磁盘。
java可序列化
序列化机制就是将一个实例对象的状态信息写入到字节流中,从而可以传输、持久化存储,在需要的时候根据字节流中的信息来重构一个相同的对象。序列化机制只序列化对象的属性值,不会序列化方法,只要JVM classloader可以load到类,那么类的方法就可以获得。序列化需要保存的是对象属性的值和对象的类型。
要使一个类可以序列化,只要简单实现java.io.Serializable接口,该接口本身不包含任何内容,实现该接口表示这个类支持序列化。未实现该接口的类无法使其任何状态序列化或反序列化。可序列化的所有子类型都是可序列化的。不可序列化的Object的子类可以是序列化的。
对象的默认序列化写入的内容是:对象的类、类签名、字段值、其他对象的引用。
EHCache使用
配置
ehcache.xml
设置缓存默认的数据过期策略
<defaultCache /
>
设置具体的命名缓存的数据过期策略,cache元素的属性:
1. name 缓存名称
2. maxElementsInMemory 内存中最大缓存对象数
3. maxElementsOnDisk 磁盘总最大缓存对象数,0表示无穷大
4. eternal true表示对象永不过期,并忽略timeToIdleSeconds和timeToLiveSeconds属性,默认false
5. overflowToDisk true表示当内存缓存的对象数量达到了maxElementsInMemory界限后,把溢出的对象写入硬盘中。如果缓存的对象要写入硬盘,该对象必须实现Serializable接口。
6. timeToIdleSeconds 设置允许对象处于空闲状态的最长时间,以秒为单位。如果处于空闲状态的时间超过了timeToIdleSeconds,对象就过期了,EHCache将把它从缓存中清空。若属性值为0,则对象可以无限期地存在缓存中。当external=false时,该属性才有效。
7. memoryStoreEvictionPolicy 当达到maxElementsInMemory限制时,根据指定的策略去清理内存。可选策略有:LRU(最近最少使用)、LFU(最少访问次数)、FIFO(先进先出)。
使用
//从classes目录加载ehcache.xml配置文件
CacheManager cacheManager = CacheManager.create();
//根据配置文件获得Cache实例
Cache cache=cacheManager.getCache(“Cachename”);
//清空cache中的所有元素
cache.removeAll();
//往cache中添加元素
cache.put(new Element(“name”,”value”));
//获取Cache中的元素
Element e=cache.get(“name”);
//根据名称移除Cache
manager.removeCache(“cachename”);
//关闭管理器
cacheManager.shutdown();