17 缓存预热怎么做

vvEcho 2025-03-04 17:23:44
Categories: Tags:

1.应用启动时预加载

在服务启动阶段(如Spring Boot应用初始化完成时),通过代码自动加载热点数据到缓存。

适合系统配置,数据量小且确定的情况。

实现方式:

Spring Boot的CommandLineRunner或ApplicationRunner接口:在run方法中执行预热逻辑,例如加载数据库中的高频访问数据到Redis。

@PostConstruct注解:在Bean初始化完成后立即执行预热方法。

监听应用上下文事件:如ContextRefreshedEvent或ApplicationReadyEvent,触发数据加载。

1
2
3
4
5
6
7
8
9
10
11
12
13
@Component
public class CachePreloader implements CommandLineRunner {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Autowired
private NewsService newsService;

@Override
public void run(String... args) {
List<News> hotNews = newsService.getHotNews(); // 查询热点数据
redisTemplate.opsForValue().set("hot_news", hotNews, 1, TimeUnit.HOURS);
}
}

2.定时任务预热

适用于数据定期更新的场景(如每日榜单),通过定时任务(如Quartz、Spring Scheduler)周期性刷新缓存。

1
2
3
4
5
@Scheduled(cron = "0 0 3 * * ?") // 每天凌晨3点执行
public void refreshCache() {
List<Product> topProducts = productService.getTopSales();
redisTemplate.opsForValue().set("top_products", topProducts);
}

3.手动触发预热

通过管理界面或API手动触发缓存加载,适合运维人员干预或紧急场景

可参考:如何监控热key