springboot項目中redis常見的增刪改查操作大全
一、增(Create)??
1?? 最基礎(chǔ):存字符串
redisTemplate.opsForValue().set("key", "value");?? 場景:
- 緩存數(shù)據(jù)
- 登錄態(tài) token
2?? 設(shè)置過期時間(非常常用??)
redisTemplate.opsForValue().set("key", "value", 10, TimeUnit.MINUTES);
?? 場景:
- 緩存自動失效
- 避免臟數(shù)據(jù)
3?? 存對象(常見??)
redisTemplate.opsForValue().set("user:1", user);
?? 注意:
- 需要序列化(JSON / Redis序列化器)
?? 場景:
- 用戶信息緩存
- 商品詳情緩存
4?? Hash 存對象(更推薦??)
redisTemplate.opsForHash().put("user:1", "name", "Tom");
redisTemplate.opsForHash().put("user:1", "age", 18);
?? 場景:
- 存復(fù)雜對象
- 避免整體序列化
二、查(Read)??
1?? 獲取字符串 / 對象
redisTemplate.opsForValue().get("key");
2?? 判斷是否存在
redisTemplate.hasKey("key");
?? 場景:
- 防止重復(fù)請求
- 緩存判斷
3?? Hash 查詢
redisTemplate.opsForHash().get("user:1", "name");
?? 或獲取整個對象:
redisTemplate.opsForHash().entries("user:1");
4?? 設(shè)置過期時間查詢
redisTemplate.getExpire("key");
三、改(Update)??
1?? 覆蓋更新(最常見)
redisTemplate.opsForValue().set("key", "newValue");
?? 本質(zhì):
?? Redis 沒有“修改”,只有重新 set
2?? Hash 更新(局部更新??)
redisTemplate.opsForHash().put("user:1", "name", "Jerry");
?? 場景:
- 修改用戶某個字段
3?? 自增(計數(shù)??)
redisTemplate.opsForValue().increment("count");
?? 場景:
- 瀏覽量
- 點贊數(shù)
- 訪問次數(shù)
4?? 自減
redisTemplate.opsForValue().decrement("stock");
?? 場景:
- 秒殺庫存
5?? 修改過期時間
redisTemplate.expire("key", 5, TimeUnit.MINUTES);
?? 場景:
- 延長緩存時間
四、刪(Delete)??
1?? 刪除單個 key
redisTemplate.delete("key");
2?? 批量刪除
redisTemplate.delete(Arrays.asList("k1", "k2"));
3?? 模糊刪除(慎用??)
Set<String> keys = redisTemplate.keys("user:*");
redisTemplate.delete(keys);
?? 場景:
- 刪除一類緩存
?? 生產(chǎn)慎用(會阻塞)
五、真實項目中的完整流程(重點??)
?? 以“用戶查詢”為例:
public User getUser(Long id) {
String key = "user:" + id;
// 1. 查緩存
User user = (User) redisTemplate.opsForValue().get(key);
if (user != null) {
return user;
}
// 2. 查數(shù)據(jù)庫
user = userMapper.selectById(id);
// 3. 放入緩存
redisTemplate.opsForValue().set(key, user, 30, TimeUnit.MINUTES);
return user;
}?? 這就是標(biāo)準(zhǔn):
?? 緩存穿透/緩存使用模型(高頻面試)
六、常見組合(真實項目??)
1?? 緩存 + 過期時間
set + expire
?? 避免數(shù)據(jù)永久不更新
2?? 緩存擊穿(熱點數(shù)據(jù))
?? 解決方式:
- 加鎖(Redis分布式鎖)
- 邏輯過期
3?? 緩存雪崩
?? 解決:
- 隨機(jī)過期時間
redisTemplate.opsForValue().set("key", "value", 30 + new Random().nextInt(10), TimeUnit.MINUTES);
七、一句話總結(jié)(面試直接用??)
??
Spring Boot 中 Redis 的增刪改查本質(zhì)是:通過 RedisTemplate 提供的 set、get、delete、increment 等 API 實現(xiàn)數(shù)據(jù)的存儲、查詢、更新和刪除,其中增和改本質(zhì)都是 set,查用 get,刪用 delete,并結(jié)合過期時間和 Hash、List 等結(jié)構(gòu)實現(xiàn)復(fù)雜業(yè)務(wù)。
到此這篇關(guān)于springboot項目中redis常見的增刪改查操作大全的文章就介紹到這了,更多相關(guān)springboot redis增刪改查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Springsecurity Oauth2如何設(shè)置token的過期時間
如果用戶在指定的時間內(nèi)有操作就給token延長有限期,否則到期后自動過期,如何設(shè)置token的過期時間,本文就來詳細(xì)的介紹一下2021-08-08
Netty分布式Server啟動流程服務(wù)端初始化源碼分析
本章主要講解server啟動的關(guān)鍵步驟,?讀者只需要了解server啟動的大概邏輯,?知道關(guān)鍵的步驟在哪個類執(zhí)行即可,?并不需要了解每一步的運(yùn)作機(jī)制,?之后會對每個模塊進(jìn)行深度分析2022-03-03
Java ArrayList中存放引用數(shù)據(jù)類型的方式
這篇文章主要介紹了Java ArrayList中存放引用數(shù)據(jù)類型的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
SpringBoot實現(xiàn)PDF轉(zhuǎn)圖片的代碼示例
在本文中,我們使用SpringBoot演示了如何將PDF文件轉(zhuǎn)換為一張或多張圖片,這些示例演示了如何使用Java編程語言與其他開源技術(shù)集成,以實現(xiàn)各種文件格式之間的轉(zhuǎn)換,感興趣的小伙伴跟著小編一起來看看吧2024-08-08
使用ServletUtil.write方法下載接口文件中文亂碼問題解決
本文主要介紹了使用ServletUtil.write方法下載接口文件中文亂碼問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
SpringBoot?Test的webEnvironment源碼解讀
這篇文章主要為大家介紹了SpringBoot?Test的webEnvironment源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
SpringCloud項目中Feign組件添加請求頭所遇到的坑及解決
這篇文章主要介紹了SpringCloud項目中Feign組件添加請求頭所遇到的坑及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04

