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

