Ehcache 3.8 简单持久化

1 引入依赖

<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.8.1</version>
</dependency>

2 持久化配置

public class EhcacheHelper {

private static CacheManager cacheManager;

public static CacheManager getCacheManager() {
if(!isAvailable()){
cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(new File("java.io.tmpdir", "EhcacheData")))
.withCache("xxxCache",
CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class,
ResourcePoolsBuilder.newResourcePoolsBuilder()
.heap(2000, EntryUnit.ENTRIES)
.offheap(1, MemoryUnit.MB)
.disk(20, MemoryUnit.MB, true)
)
).build(true);
}
return cacheManager;
}

public static void close() {
if(isAvailable()){
cacheManager.close();
}
}

public static Boolean isAvailable() {
return null != cacheManager && cacheManager.getStatus().equals(Status.AVAILABLE);
}
}

3 使用示例

存放

public void setCache() {
CacheManager persistentCacheManager = EhcacheHelper.getCacheManager();
Cache<Long, String> persistentCache = persistentCacheManager.getCache("threeTieredCache", Long.class, String.class);
for (long i = 0;i < 100;i ++){
persistentCache.put(i, "这是第:-" + i + "-条信息");
}

persistentCache.forEach( cc -> {
log.info("persistentCache,主键:{},值:{}",cc.getKey(),cc.getValue());
});

persistentCacheManager.close();
}

取用

public void getCache() {
CacheManager persistentCacheManager = EhcacheHelper.getCacheManager();
Cache<Long, String> persistentCache = persistentCacheManager.getCache("threeTieredCache", Long.class, String.class);

int count = 0;
Iterator<Cache.Entry<Long,String>> iterator = persistentCache.iterator();
while(iterator.hasNext()){
++ count;
Cache.Entry<Long,String> entry = iterator.next();
log.info("threeTieredCache,主键:{},值:{}",entry.getKey(),entry.getValue());
}
log.info("信息的总条数为:{}",count);
persistentCacheManager.close();
}

4 关闭钩子

public class Application {

public static void main(String[] args) {
SpringApplication.run(SkuSyncApplication.class, args);

//将 hook 线程添加到运行时环境中去
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
EhcacheHelper.close();
System.out.println("ShutdownHook ==> Ehcache closed");
}
});
}

}
Author: iMine
Link: https://imine141.github.io/2020/07/20/Spring/Data/Ehcache%203.8%20%E7%AE%80%E5%8D%95%E6%8C%81%E4%B9%85%E5%8C%96/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.