CacheManager配置:
@ComponentScan(basePackages = {"com.enjoynow.finance.accounting.service"})
@EnableCaching
public class Config {
@Autowired
private RedisTemplate redisTemplate;
@Bean
RedisCacheWriter writer() {
return RedisCacheWriter.nonLockingRedisCacheWriter(redisTemplate.getConnectionFactory());
}
@Bean
@ConditionalOnMissingBean
public StringRedisSerializer stringRedisSerializer() {
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
return stringRedisSerializer;
}
@Bean
@ConditionalOnMissingBean
public GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer() {
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer = new GenericJackson2JsonRedisSerializer();
return genericJackson2JsonRedisSerializer;
}
@Bean(name = "redisCacheManager")
public RedisCacheManager initRedisCacheManager(StringRedisSerializer stringRedisSerializer,
GenericJackson2JsonRedisSerializer genericJackson2JsonRedisSerializer){
RedisCacheConfiguration defaultCacheConfig = RedisCacheConfiguration.defaultCacheConfig();
// 设置缓存管理器管理的缓存的默认过期时间
defaultCacheConfig = defaultCacheConfig
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
// 设置value为json序列化
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
// 不缓存空值
.disableCachingNullValues();
Set<String> cacheNames = new HashSet<>();
cacheNames.add("cmpos_fp");
// 对每个缓存空间应用不同的配置
Map<String, RedisCacheConfiguration> configMap = new HashMap<>();
// 设置失效时间
configMap.put("cmpos_fp", defaultCacheConfig.entryTtl(Duration.ofSeconds(10)));
RedisCacheManager cacheManager = RedisCacheManager.builder(writer())
.cacheDefaults(defaultCacheConfig)
.initialCacheNames(cacheNames)
.withInitialCacheConfigurations(configMap)
.disableCreateOnMissingCache()
.build();
return cacheManager;
}
}
使用:
public interface FinanceProductService {
CmposFpResponse queryCmposFpByFpId(String fpId);
}@Service
@Slf4j
public class FinanceProductServiceImpl implements FinanceProductService {
@Override
@Cacheable(value = "cmpos_fp", key = "#fpId")
public CmposFpResponse queryCmposFpByFpId(String fpId) {
return fpResource.queryCmposFp(fpId);
}
}版权声明:本文为chenkaibsw原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。