一,ehcache简介
Ehcache主要是一种广泛使用的开源java分布式缓存。主要面向通用的缓存,java EE 和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常 等处理程序。主要特点,快速,简单,多种缓存策略。
所需jar包(ehcache.jar,依赖jar包 slf4j.jar)
maven 项目 pom.xml
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>version</version>
</dependency>
二,了解 ehcache 不同模式下的生命周期
1.内存存储(堆缓存,堆外缓存)
/**
* 内存存储 生命周期
*
* @return 存儲内容
*/
public UserManagedCache<Long, String> userManagedCacheInit() throws Exception {
// 实例化 UserManagedCache操作
// UserManagedCacheBuilder.newUserManagedCacheBuilder(key,value)两个参数缓存存储的key和value
// withEventExecutors 提供有序无序事件传递
// withEventListeners 提供监听配置
// heap() 第一个参数是这堆上准许的条目 也可以设置单位(G,MB,KB,B),第二个是超出之后如何执行 ,详情请查看官方文档
// 如果你不想用 heap() 也可以使用“堆外” offheap() 如果使用“堆外”需要定义资源池大小
UserManagedCache<Long, String> userManagedCache = UserManagedCacheBuilder
.newUserManagedCacheBuilder(Long.class, String.class)
.withEventExecutors(Executors.newSingleThreadExecutor(), Executors.newFixedThreadPool(5))
.withEventListeners(CacheEventListenerConfigurationBuilder
.newEventListenerConfiguration(ListenerObject.class, EventType.CREATED, EventType.UPDATED)
.asynchronous().unordered())
.withResourcePools(ResourcePoolsBuilder.newResourcePoolsBuilder().heap(3, EntryUnit.ENTRIES).offheap(10, MemoryUnit.MB))
.build(false);
// 实例化UserManagedCache 的时候如果 build 设置false则必须执行init()操作
userManagedCache.init();
// 缓存内容
userManagedCache.put(1L, "Ehcache 用户管理缓存1");
userManagedCache.put(2L, "Ehcache 用户管理缓存2");
userManagedCache.put(3L, "Ehcache 用户管理缓存2");
// 释放缓存资源 《注: 使用完成后在释放资源》
// userManagedCache.close();
// 返回状态
// userManagedCache.getStatus();
return userManagedCache;
}
2 . 磁盘缓存
/**
* 磁盘存 储持久生命周期
*
* @return 存儲内容
*/
public PersistentUserManagedCache<Long, String> persistentUserManagedCacheInit() throws Exception {
// 创建本地磁盘存储 服务
LocalPersistenceService localPerisitenceService = new DefaultLocalPersistenceService(
new DefaultPersistenceConfiguration(new File("E:\\a", "myUserData")));
// 实例化 PersistentUserManagedCache
// with(new
// UserManagedPersistenceContext<Long,String>("cache-name",本地磁盘存储服务对象)将持久性服务传递给构造器以及缓存名称
// disk() 第一个参数磁盘上准许存储的最大条目 或者 大小,第二个参数是单位,第三个参数是boolean类型如果设置true
// 则池是持久的,如果不写参数则默认false 不持久
PersistentUserManagedCache<Long, String> cache = UserManagedCacheBuilder
.newUserManagedCacheBuilder(Long.class, String.class)
.with(new UserManagedPersistenceContext<Long, String>("cache-name", localPerisitenceService))
.withEventExecutors(Executors.newSingleThreadExecutor(), Executors.newFixedThreadPool(5))
.withEventListeners(CacheEventListenerConfigurationBuilder
.newEventListenerConfiguration(ListenerObject.class, EventType.CREATED, EventType.UPDATED)
.asynchronous().unordered())
.withResourcePools(ResourcePoolsBuilder.newResourcePoolsBuilder().heap(10L, EntryUnit.ENTRIES).offheap(5, MemoryUnit.MB).disk(10L,
MemoryUnit.MB))
.build(false);
// 实例化cache 的时候如果 build 设置false则必须执行init()操作
cache.init();
// 使用缓存工作
cache.put(42L, "磁盘存 储持久生命周期42");
cache.put(43L, "磁盘存 储持久生命周期43");
// 关闭缓存不会删除磁盘上的数据
// cache.close();
// 要在关闭后执行此操作删除磁盘的上缓存数据 销毁全部,
// destroyCache(String CacheName) 指定销毁
// cache.destroy();
// 完成后停止持久化操作
// localPerisitenceService.stop();
return cache;
}
源码地址 : https://pan.baidu.com/s/1boP4fWb