Redis緩存預熱的概念及方法詳解
1. 什么叫「緩存預熱」?
預熱 = 項目啟動后、用戶訪問前,提前把數(shù)據(jù)存進 Redis。
也就是:
不讓用戶第一次訪問時才去建緩存,而是我們自己提前把緩存建好。
這就叫預熱。
2. 為什么邏輯過期必須預熱?
因為邏輯過期的代碼是這樣的:
if (緩存不存在) {
return null; // 不查庫、不建緩存
}它不會自動重建缺失的緩存。所以緩存必須提前就存在,否則用戶直接拿不到數(shù)據(jù)。
3. 到底怎么預熱?(3 種最簡單方法)
我給你寫能直接用、最簡單的。
方法 1:項目啟動時自動加載(最常用)
用 Spring 的 @PostConstruct
@PostConstruct
public void preloadHotShops() {
// 1. 查出所有熱點店鋪(比如前100個)
List<Shop> hotShops = list();
// 2. 逐個寫入 Redis(邏輯過期方式)
for (Shop shop : hotShops) {
saveShop2Redis(shop.getId(), 30L);
}
}意思:項目一啟動,自動把熱門店鋪存進 Redis。用戶一來,Redis 里就有數(shù)據(jù)。
方法 2:寫個接口手動觸發(fā)(測試最方便)
@GetMapping("/preload/shop/{id}")
public Result preload(@PathVariable Long id) {
saveShop2Redis(id, 30L);
return Result.ok("預熱成功");
}調用一下:/preload/shop/1緩存就建好了。
方法 3:測試時隨便查一次就預熱
你只要調用一次:
queryWithLogicalExpire(1L);
內(nèi)部會走到:
saveShop2Redis(id, 20L);
緩存就建好了,這也算手動預熱。
saveShop2Redis是干嘛的?
一句話說死:它就是把數(shù)據(jù)庫里的店鋪數(shù)據(jù),查出來,封裝成邏輯過期格式,存進 Redis 的方法。
private void saveShop2Redis(Long id, Long expireSeconds) {
// 1. 根據(jù)id查數(shù)據(jù)庫
Shop shop = getById(id);
// 2. 封裝成 RedisData(數(shù)據(jù) + 過期時間)
RedisData redisData = new RedisData();
redisData.setData(shop);
redisData.setExpireTime(LocalDateTime.now().plusSeconds(expireSeconds));
// 3. 存進 Redis(不給key設過期時間?。?
stringRedisTemplate.opsForValue().set(CACHE_SHOP_KEY + id, JSONUtil.toJsonStr(redisData));
}它一共干 3 件事:
- 查數(shù)據(jù)庫,拿到最新店鋪
- 打包:店鋪 + 邏輯過期時間
- 存 Redis,key 永遠不過期
它在整個邏輯里的角色是什么?
- 緩存預熱時 → 調用它,提前把數(shù)據(jù)放進 Redis
- 緩存邏輯過期時 → 調用它,后臺更新緩存
它就是專門負責 “往 Redis 里寫邏輯過期緩存” 的工具方法。
到此這篇關于Redis緩存預熱的概念及方法詳解的文章就介紹到這了,更多相關Redis緩存預熱內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Redis SDS字符串與集合的底層實現(xiàn)原理解析
這篇文章給大家介紹了Redis SDS字符串與集合的底層實現(xiàn)原理解析,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2026-04-04
使用Jedis線程池returnResource異常注意事項
這篇文章主要介紹了使用Jedis線程池returnResource異常注意事項,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03
Redis?HyperLogLog數(shù)據(jù)量統(tǒng)計的實現(xiàn)實例
在大數(shù)據(jù)時代,統(tǒng)計海量數(shù)據(jù)中的唯一值是一個常見的需求,但同時也是極具挑戰(zhàn)性的任務,傳統(tǒng)的統(tǒng)計方法可能會消耗大量內(nèi)存或計算資源,而?Redis?的?HyperLogLog?數(shù)據(jù)結構?則提供了一種高效、輕量的解決方案,下面就來詳細介紹一下HyperLogLog的使用,感興趣的可以了解一下2025-09-09

