Springboot|Springboot 注解 @Cacheable自定义单个key设置expire超时时间 并在配置文件里配置

Springboot RedisCacheManager 类的配置 指定key的过期时间 并在配置文件里配置
目的&效果 在springBoot中配置了RedisCache,当使用@Cacheable注解时,默认为redisCache,通过在配置文件里设置不同key的过期时间,达到可自定义key过期时间的效果。
方案
step 1 新建一个Map类,用于存放要设置的key

@ConfigurationProperties public class Properties { private final Map initCaches = Maps.newHashMap(); public Map getInitCaches() { return initCaches; } }

step2 在redis配置类里编写cacheManager,并将map set进去
@Autowired private Properties properties; @Bean public CacheManager cacheManager(RedisConnectionFactory connectionFactory) { RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofMinutes(10)).disableCachingNullValues(); RedisCacheWriter redisCacheWriter = RedisCacheWriter.nonLockingRedisCacheWriter(connectionFactory); ImmutableSet.Builder cacheNames = ImmutableSet.builder(); ImmutableMap.Builder cacheConfig = ImmutableMap.builder(); for (Map.Entry entry : properties.getInitCaches().entrySet()) { cacheNames.add(entry.getKey()); cacheConfig.put(entry.getKey(), defaultCacheConfig.entryTtl(entry.getValue())); } return RedisCacheManager.builder(redisCacheWriter) .cacheDefaults(defaultCacheConfig) .initialCacheNames(cacheNames.build()) .withInitialCacheConfigurations(cacheConfig.build()) .build(); }

step3 在Springboot yml文件里配置相关的key的过期时间 就可以指定@Cacheable的value的过期时间
//伪代码 @Cacheable(cacheNames = "fooboo", key = "#xxx", unless = "#result == null") public void fooboo(String xxx){}

applicaion.yml文件中设置
initCaches:
fooboo: 10m
fooboo1: 1h
【Springboot|Springboot 注解 @Cacheable自定义单个key设置expire超时时间 并在配置文件里配置】则在redis缓存中fooboo的值,10分钟过期,fooboo1的值1小时过期

    推荐阅读