1 初始化 EhCacheManager
@Bean
public EhCacheManager ehCacheManager() {
EhCacheManager em = new EhCacheManager();
em.setCacheManagerConfigFile("classpath:config/ehcache.xml");
return em;
}
2 创建service
@Autowired
private EhCacheManager ehCacheCacheManager;
private Cache getCache(String name) {
//获取CacheManager类
CacheManager cacheManager = ehCacheCacheManager.getCacheManager();
//获取Cache
Cache cache = cacheManager.getCache(name);
return cache;
}
/**
* 数据存入缓存
*
* @param name
* @param key
* @param obj
*/
@Override
public void setCacheValue(String name, String key, Object obj) {
this.getCache(name).put(new Element(key, obj));
}
/**
* 判断key是否存在
*
* @param name
* @param key
* @return
*/
@Override
public boolean isKeyInCache(String name, String key) {
//获取Cache
Cache cache = this.getCache(name);
//ehcache惰性删除机制,缓存失效后key有可能依然存在
if (cache != null && cache.isKeyInCache(key)) {
return cache.get(key) == null ? false : true;
} else {
return false;
}
}
/**
* 获取key对应的缓存数据
*
* @param name
* @param key
* @return
*/
@Override
public Object getCacheValue(String name, String key) {
return isKeyInCache(name, key) == true ? this.getCache(name).get(key) : null;
}
3 调用
@Autowired
private ICacheService cacheService;
@Override
@Async
public void save(AdapterSearchlogDO adapterSearchlog) {
String ckey = adapterSearchlog.getSid();
if (!cacheService.isKeyInCache("logAdd", ckey)) {
adapterSearchlog.setCreateDate(new Date());
adapterSearchlog.setSearchDate(DateUtils.getCheckDay(0));
int isSave = adapterSearchlogDao.save(adapterSearchlog);
if (isSave > 0) {
cacheService.setCacheValue("logAdd", ckey, ckey);
}
}
}
3 特殊调用
@Service
@Component
public class RewriterCore {
private Cache dowCache;
public Cache getDowCache() {
return dowCache;
}
public void setDowCache(Cache dowCache) {
this.dowCache = dowCache;
}
}
@Service
@Configuration
@AutoConfigureBefore(XssConfig.class)
public class UrlAuthConfig {
@Bean(name = "ehCacheCacheManager")
@ConditionalOnMissingBean
public net.sf.ehcache.CacheManager ehCacheCacheManager() {
return CacheManager.create();
}
/**
* 授权重写配置
*/
@Bean(initMethod = "init", name = "rewriterCore") // 声明其为Bean实例
public RewriterCore getRewriterCoreBean() {
RewriterCore reg = new RewriterCore();
reg.setStats(false);
reg.setConfigLoader(configLoader);
reg.setSessionListener(sessionListener);
reg.setRewriterListener(rewriterListener);
reg.setAiRwtCache(ehCacheCacheManager().getCache("aiRwtCache"));
reg.setDowCache(ehCacheCacheManager().getCache("downCache"));
reg.setHttpResponseCache(getHttpResponseCacheBean());
reg.setSessionTimeout(30);
return reg;
}
}