package com.jx.jxreserve.groupbuy.manager;
import com.jd.flash.commons.exception.BaseBusinessException;import com.jx.jxreserve.groupbuy.common.enums.ErrorCode;import lombok.extern.slf4j.Slf4j;import org.ehcache.Cache;import org.ehcache.CacheManager;import org.ehcache.PersistentCacheManager;import org.ehcache.config.builders.CacheConfigurationBuilder;import org.ehcache.config.builders.CacheManagerBuilder;import org.ehcache.config.builders.ExpiryPolicyBuilder;import org.ehcache.config.builders.ResourcePoolsBuilder;import org.ehcache.config.units.EntryUnit;import org.ehcache.config.units.MemoryUnit;import org.springframework.stereotype.Component;
import java.io.File;import java.time.Duration;
import static org.ehcache.Status.AVAILABLE;
/** * @author zhangpengfei9 * @version V1.0 * Ehcache的测试管理类 */@Slf4j@Componentpublic class EhcacheTestManager {
/*************************** 1.纯内存操作 *****************************/ // 1.1 创建缓存 preConfigured 基于 内存 CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder() .withCache("preConfigured", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(10))) .build(true);
// 1.2 获取缓存实例 Cache<Long, String> preConfigured = cacheManager.getCache("preConfigured", Long.class, String.class);
/*************************** 2.新增实例 *****************************/ // 2.1 创建新的实例 并获取实例 Cache<Long, String> myCache = cacheManager.createCache("myCache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.heap(10)));
/*************************** 3.三层存储 *****************************/ // 3.1 创建缓存 myData 基于 内存->堆外存储->本地磁盘 PersistentCacheManager persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder() .with(CacheManagerBuilder.persistence(new File("/home/export/App/conf/", "groupData"))) .withCache("testDiskCache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .heap(10, EntryUnit.ENTRIES) .offheap(1, MemoryUnit.MB) .disk(20, MemoryUnit.MB, true) ) .withExpiry(ExpiryPolicyBuilder.timeToLiveExpiration(Duration.ofSeconds(600))) // 设置缓存有效期 ).build(true);
/*************************** 4.多个缓存 - 三层存储 *****************************/ // 4.1 一个实例管理多个缓存 并且每个缓存都可持久化到本地磁盘 PersistentCacheManager persistentCacheManager1 = CacheManagerBuilder.newCacheManagerBuilder() .with(CacheManagerBuilder.persistence( new File("/home/export/App/conf/").getAbsoluteFile())) .withCache("cache1", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .heap(10, EntryUnit.ENTRIES) .offheap(1, MemoryUnit.MB) .disk(20, MemoryUnit.MB, true) ) ) .with(CacheManagerBuilder.persistence( new File("/home/export/App/conf/").getAbsoluteFile())) .withCache("cache2", CacheConfigurationBuilder.newCacheConfigurationBuilder(String.class, Integer.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .heap(20, EntryUnit.ENTRIES) .offheap(2, MemoryUnit.MB) .disk(30, MemoryUnit.MB, true) ) ) .build(true);
/** * 设置缓存 */ public void setEhCache(Long key, String values) throws BaseBusinessException { try { // 获取存储实例 threeTieredCache log.info("setEhCache.value:{},{}", values, key); Cache<Long, String> testDiskCache = getManagerCache("testDiskCache");
testDiskCache.put(key, values);
} catch (Exception e) { log.error("setEhCache failure! Exception:", e); throw new BaseBusinessException(ErrorCode.SYSTEM_DB_ERROR.getCode(), ErrorCode.SYSTEM_DB_ERROR.getMessage()); } }
/** * 查询缓存 */ public String getEhCache(Long key) throws BaseBusinessException { try { // 获取存储实例 threeTieredCache log.info("getEhCache.key:{}", key); Cache<Long, String> testDiskCache = getManagerCache("testDiskCache"); return testDiskCache.get(key);
} catch (Exception e) { log.error("setEhCache failure! Exception:", e); throw new BaseBusinessException(ErrorCode.SYSTEM_DB_ERROR.getCode(), ErrorCode.SYSTEM_DB_ERROR.getMessage()); } }
/** * 设置缓存 */ public void closeEhCache() throws BaseBusinessException { try { // 获取存储实例 threeTieredCache log.info("closeEhCache.persistentCacheManager.close1:{}", persistentCacheManager.getStatus()); persistentCacheManager.close(); log.info("closeEhCache.persistentCacheManager.close2:{}", persistentCacheManager.getStatus()); } catch (Exception e) { log.error("setEhCache failure! Exception:", e); throw new BaseBusinessException(ErrorCode.SYSTEM_DB_ERROR.getCode(), ErrorCode.SYSTEM_DB_ERROR.getMessage()); } }
private Cache<Long, String> getManagerCache(String cache) { // 3.1 创建缓存 myData 基于 内存->堆外存储->本地磁盘 log.info("persistentCacheManager.getStatus():{}", persistentCacheManager.getStatus()); if (AVAILABLE != persistentCacheManager.getStatus()) { persistentCacheManager = CacheManagerBuilder.newCacheManagerBuilder() .with(CacheManagerBuilder.persistence(new File("/home/export/App/conf/", "groupData"))) .withCache("testDiskCache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .heap(10, EntryUnit.ENTRIES) .offheap(1, MemoryUnit.MB) .disk(20, MemoryUnit.MB, true) ) ).build(true); log.info("persistentCacheManager.getStatus1:{}", persistentCacheManager.getStatus()); }
Cache<Long, String> testDiskCache = persistentCacheManager.getCache(cache, Long.class, String.class); return testDiskCache; }}
评论