首页 > 解决方案 > 为什么我的 Spring Boot 应用程序中的 Redis 缓存没有变空?

问题描述

我在我的 Spring Boot 应用程序中使用 Redis Cache 来存储多个 rest API 的数据。

我正在使用 Spring Cron Jobs 定期清除 Redis 缓存。该方法在所需的时间段被调用。

我已经验证了日志,但缓存没有变得清晰,因此它显示的是过时的数据。

我试图清除缓存的代码。

public class CustomerDerivation {
    @Autowired
    @Qualifier("redisCacheMngr")
    CacheManager redisCacheMngr;

    @Scheduled(cron = "${redis.api.update.interval}")
    @CacheEvict(value = "redis-cache", allEntries = true, cacheNames = {"redis-cache"})
    protected void cacheEvict() {
        redisCacheMngr.getCache("redis-cache").clear();
        logger.info("Evicting ModelCache");
    }
}

自定义缓存配置代码。

@Configuration
@Profile("cloud")
public class CacheConfig extends AbstractCloudConfig {
    @Autowired
    Environment env;

    @Bean
    public RedisConnectionFactory brRedisFactory() {
        return connectionFactory().redisConnectionFactory(env.getProperty("model_cache_name"));
    }

    @Bean
    public RedisTemplate<String, Object> brRedisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
        redisTemplate.setConnectionFactory(brRedisFactory());
        return redisTemplate;
    }

    @Bean(name = "redisCacheMngr")
    public CacheManager cacheManager() {
        RedisCacheManager cacheManager = new RedisCacheManager(brRedisTemplate());
        cacheManager.setUsePrefix(true);
        cacheManager.setTransactionAware(true);
        return cacheManager;
    }
}

如何修复清除redis缓存的代码?

标签: javaspringspring-bootredis

解决方案


1)您是否使用@EnableCaching 注解启用了缓存?2) 你为什么在同一方法中使用@CacheEvict 和 clear()?两者都有相同的目的。使用其中之一。


推荐阅读