|
@ -9,38 +9,35 @@ import org.springframework.beans.factory.support.DefaultListableBeanFactory;
|
|
|
import org.springframework.cache.Cache;
|
|
|
import org.springframework.data.redis.cache.RedisCacheManager;
|
|
|
import org.springframework.data.redis.core.RedisOperations;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
import java.util.concurrent.ConcurrentHashMap;
|
|
|
|
|
|
@Component
|
|
|
public class CustomRedisCacheManager extends RedisCacheManager implements CustomCacheManager{
|
|
|
|
|
|
private RedisCacheManager redisCacheManager = null;
|
|
|
@Value("expire-time")
|
|
|
private Long expireTime;
|
|
|
|
|
|
@Value("refresh-time")
|
|
|
private Long refreshTime;
|
|
|
|
|
|
@Autowired
|
|
|
private DefaultListableBeanFactory beanFactory;
|
|
|
|
|
|
private RedisCacheManager redisCacheManager = null;
|
|
|
|
|
|
//父类存放缓存的cacheMap字段
|
|
|
private static final String SUPER_CACHEMAP = "cacheMap";
|
|
|
|
|
|
private static final String SUPER_DYNAMIC = "dynamic";
|
|
|
|
|
|
/**
|
|
|
* 父类cacheNullValues字段
|
|
|
*/
|
|
|
//父类cacheNullValues字段
|
|
|
private static final String SUPER_CACHENULLVALUES = "cacheNullValues";
|
|
|
|
|
|
/**
|
|
|
* 父类updateCacheNames方法
|
|
|
*/
|
|
|
// 父类updateCacheNames方法
|
|
|
private static final String SUPER_METHOD_UPDATECACHENAMES = "updateCacheNames";
|
|
|
|
|
|
|
|
|
@Value("expire-time")
|
|
|
private Long expireTime;
|
|
|
|
|
|
@Value("refresh-time")
|
|
|
private Long refreshTime;
|
|
|
|
|
|
@Override
|
|
|
public Long getExpireTime() {
|
|
|
return expireTime;
|
|
@ -51,13 +48,6 @@ public class CustomRedisCacheManager extends RedisCacheManager implements Custom
|
|
|
return refreshTime;
|
|
|
}
|
|
|
|
|
|
public void setExpireTime(Long expireTime) {
|
|
|
this.expireTime = expireTime;
|
|
|
}
|
|
|
|
|
|
public void setRefreshTime(Long refreshTime) {
|
|
|
this.refreshTime = refreshTime;
|
|
|
}
|
|
|
|
|
|
public CustomRedisCacheManager(RedisOperations redisOperations) {
|
|
|
super(redisOperations);
|
|
@ -70,6 +60,11 @@ public class CustomRedisCacheManager extends RedisCacheManager implements Custom
|
|
|
return redisCacheManager;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 覆盖父类获取cache方法
|
|
|
* @param name,name为注解上的value,以#分隔,第一个为缓存的名字,第二个为缓存的过期时间,第三个为缓存的自动刷新时间
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
public Cache getCache(String name){
|
|
|
String[] cacheParams = name.split(CustomCacheManager.SEPARATOR);
|
|
@ -77,11 +72,11 @@ public class CustomRedisCacheManager extends RedisCacheManager implements Custom
|
|
|
if(StringUtils.isEmpty(cacheName)){
|
|
|
return null;
|
|
|
}
|
|
|
//注解里面的过期时间覆盖默认的过期时间
|
|
|
long expireTime = getExpireTime(name,cacheParams);
|
|
|
//注解里面的过期时间覆盖默认的过期时间,Redis默认有提供过期时间,如果没有传值,就用配置的默认刷新时间
|
|
|
Long expireTime = getExpireTime(name,cacheParams);
|
|
|
|
|
|
//注解里面的刷新时间
|
|
|
long refreshTime = getAutoRefreshTime(cacheParams);
|
|
|
//注解里面的刷新时间,如果没有传值,就用配置的默认刷新时间
|
|
|
Long refreshTime = getRefreshTime(cacheParams);
|
|
|
|
|
|
Object obj = ReflectionUtils.getFieldValue(getInstance(),SUPER_CACHEMAP);
|
|
|
if(null != obj && obj instanceof ConcurrentHashMap){
|
|
@ -107,11 +102,13 @@ public class CustomRedisCacheManager extends RedisCacheManager implements Custom
|
|
|
synchronized (cacheMap){
|
|
|
cache = cacheMap.get(cacheName);
|
|
|
if(null == cache){
|
|
|
//没有则创建一个cache,带上过期时间和刷新时间
|
|
|
cache = getMissingCache(cacheName,expireTime,refreshTime);
|
|
|
if(null != cache){
|
|
|
cache = decorateCache(cache);
|
|
|
cacheMap.put(cacheName,cache);
|
|
|
|
|
|
//反射调用父类updateCacheNams方法,同步更新缓存名称集合
|
|
|
Class<?>[] parameterTypes = {String.class};
|
|
|
Object[] paramters = {cacheName};
|
|
|
ReflectionUtils.invokeMethod(getInstance(),SUPER_METHOD_UPDATECACHENAMES,parameterTypes,paramters);
|
|
@ -124,11 +121,11 @@ public class CustomRedisCacheManager extends RedisCacheManager implements Custom
|
|
|
|
|
|
|
|
|
|
|
|
public CustomRedisCache getMissingCache(String cacheName, long expirationSecondTime, long preloadSecondTime) {
|
|
|
public CustomRedisCache getMissingCache(String cacheName, long expirationSecondTime, long refreshTime) {
|
|
|
Boolean dynamic = (Boolean) ReflectionUtils.getFieldValue(getInstance(),SUPER_DYNAMIC);
|
|
|
Boolean cacheNullValues = (Boolean) ReflectionUtils.getFieldValue(getInstance(), SUPER_CACHENULLVALUES);
|
|
|
return dynamic ? new CustomRedisCache(cacheName, (this.isUsePrefix() ? this.getCachePrefix().prefix(cacheName) : null),
|
|
|
this.getRedisOperations(), expirationSecondTime, preloadSecondTime, cacheNullValues) : null;
|
|
|
this.getRedisOperations(), expirationSecondTime, refreshTime, cacheNullValues) : null;
|
|
|
}
|
|
|
|
|
|
|
|
@ -152,7 +149,9 @@ public class CustomRedisCacheManager extends RedisCacheManager implements Custom
|
|
|
expirationSecondTime = Long.parseLong(expirationStr);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if(null == expirationSecondTime){
|
|
|
expirationSecondTime = this.getExpireTime();
|
|
|
}
|
|
|
return expirationSecondTime;
|
|
|
}
|
|
|
|
|
@ -161,7 +160,7 @@ public class CustomRedisCacheManager extends RedisCacheManager implements Custom
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
public Long getAutoRefreshTime(String[] cacheParams) {
|
|
|
public Long getRefreshTime(String[] cacheParams) {
|
|
|
// 自动刷新时间,默认是0
|
|
|
Long refreshTime = 0L;
|
|
|
// 设置自动刷新时间
|
|
@ -175,7 +174,9 @@ public class CustomRedisCacheManager extends RedisCacheManager implements Custom
|
|
|
refreshTime = Long.parseLong(preloadStr);
|
|
|
}
|
|
|
}
|
|
|
if(null == refreshTime){
|
|
|
refreshTime = this.getRefreshTime();
|
|
|
}
|
|
|
return refreshTime;
|
|
|
}
|
|
|
|
|
|
}
|