ehcache版本: 3.8.1
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>3.8.1</version>
</dependency>
初始化CacheManager,配置以注释方式出现在代码中:
public CacheManager getCacheManager() {
if (Objects.isNull(cacheManager)) {
synchronized ("syn") {
if (Objects.isNull(cacheManager)) {
System.getProperty("net.sf.ehcache.enableShutdownHook", "true");
cacheManager = CacheManagerBuilder.newCacheManagerBuilder()
.with(CacheManagerBuilder.persistence(new File(PATH)))
.withCache(CACHE_NAME,
CacheConfigurationBuilder
.newCacheConfigurationBuilder(String.class, String.class
, ResourcePoolsBuilder.newResourcePoolsBuilder()
// 基于堆内存
.heap(10, EntryUnit.ENTRIES)
// 基于内存
.offheap(9000, MemoryUnit.MB)
// 基于磁盘
.disk(20, MemoryUnit.GB, true))
// 磁盘存储分段,默认16
.add(new OffHeapDiskStoreConfiguration(16))
// key序列化。spi: implements Serializer
.withKeySerializer(new EhcStrSerializer())
// value序列化
.withValueSerializer(new EhcStrSerializer())
// 过期时间。
.withExpiry(ExpiryPolicyBuilder.timeToIdleExpiration(Duration.ofDays(3)))
// 并发级别
.withDispatcherConcurrency(128)
// 自定义时间增加,性能比SystemTimeSource好些 @Param granularity 增加ms数, @Param systemUpdatePeriod 时间重置系统时间
).using(new TickingTimeSource(10L, 1000L))
.build(true);
}
}
}
return cacheManager;
}
获取Cache:
public Cache<String, String> getCache() {
if (Objects.isNull(cacheManager)) {
this.getCacheManager();
}
if (Objects.isNull(cache)) {
synchronized ("syn") {
if (Objects.isNull(cache)) {
cache = cacheManager.getCache(CACHE_NAME, String.class, String.class);
}
}
}
return cache;
}

本文详细介绍如何使用EHCache 3.8.1版本进行缓存管理配置,包括初始化CacheManager,配置基于堆内存、内存和磁盘的资源池,设置并发级别,以及自定义时间源和序列化方式。
1689

被折叠的 条评论
为什么被折叠?



