| 
					
				 | 
			
			
				@ -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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |