为什么 Redis 缓存在我的 Spring Boot 应用程序中没有变空?

Lor*_*ren 7 java spring redis spring-boot

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

我正在使用 Spring Cron 作业定期清除 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

自定义缓存配置代码。

@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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

小智 1

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