17 缓存预热怎么做
vvEcho
2025-03-04 17:23:44
Categories:
12 redis
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 * * ?") public void refreshCache() { List<Product> topProducts = productService.getTopSales(); redisTemplate.opsForValue().set("top_products", topProducts); }
|
3.手动触发预热
通过管理界面或API手动触发缓存加载,适合运维人员干预或紧急场景
可参考:如何监控热key