1 问题:希望@Cacheable缓存根据名称指定失效时间
@Cacheable(value=“cacheName”)
2 增加配置类即可
package com.sap.earl.apigateway.config
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.cache.RedisCacheWriter;
import org.springframework.data.redis.core.RedisTemplate;
import java.time.Duration;
/**
* @authoring C532325:Lan,Xing:2021-09-11
*/
@EnableCaching
@Configuration
class CacheConfig {
@Value('${cache.user.expiration:600}')
Long expiration
@Autowired
private RedisTemplate redisTemplate;
@Bean
RedisCacheWriter writer() {
return RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory());
}
@Bean
CacheManager cacheManager() {
Map<String, RedisCacheConfiguration> configurationMap = new HashMap<>();
configurationMap.put("cacheName", RedisCacheConfiguration
.defaultCacheConfig().entryTtl(Duration.ofSeconds(expiration)));
return RedisCacheManager.builder(writer())
.initialCacheNames(configurationMap.keySet())
.withInitialCacheConfigurations(configurationMap)
.build();
}
}
3 多个缓存分别设置时间
- map增加一条数据
configurationMap.put("cacheName2", RedisCacheConfiguration
.defaultCacheConfig().entryTtl(Duration.ofSeconds(expiration2)));
- expiration2不会覆盖之前的时间,因为 defaultCacheConfig()返回新的对象