CacheManager配置

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版权协议,转载请附上原文出处链接和本声明。