java - 为什么我的 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缓存的代码?
解决方案
1)您是否使用@EnableCaching 注解启用了缓存?2) 你为什么在同一方法中使用@CacheEvict 和 clear()?两者都有相同的目的。使用其中之一。
推荐阅读
- laravel - E_INVALIDARG - 执行 VBoxManage 时 Laravel Homestead VirtualBox 错误
- python-3.x - python:beautifulsoup 按类查找标签,不包括某些类
- java - 如何从 firebase 实时数据库中删除,
- python - 如何从单独的变量列表中生成数据框
- c# - 在 ASP.NET Core MVC 中创建登录页面
- github - 基于名为“Release-XXXX”的新分支创建启动 Github webbook
- ios - EXPO 应用程序在 iOS 出现在前面时会闪烁,但 Android 没有问题。它是由 EXPO 自动创建的(反应导航)
- reactjs - 更新状态变量并调用反应状态?
- docker - Docker 容器正在运行但仍无法访问应用程序
- c# - System.Numerics.Vector
.NET Framework 上的初始化性能