網(wǎng)站首頁 編程語言 正文
前言
所謂的redis數(shù)據(jù)一致性即當進行修改或者保存、刪除之后,redis中的數(shù)據(jù)也應(yīng)該進行相應(yīng)變化,不然用戶再次查詢的時候很可能查詢出已經(jīng)刪除過的臟數(shù)據(jù)。
一、緩存一致的必要性
還是接上篇來說,我們已經(jīng)解決了redis緩存穿透的問題(簡單解決方案,可以再次優(yōu)化),但是使用redis的時候緩存一致性的問題我們也需要著重考慮,例如:保存了一個新用戶之后,就應(yīng)該同時在redis緩存中也插入該條數(shù)據(jù),更新了某條數(shù)據(jù)在緩存中也應(yīng)該同步更新,而redis默認的做法是:當你不去設(shè)置的時候redis中存放的一值是你之前存放的數(shù)據(jù),只有在重啟服務(wù)器的時候數(shù)據(jù)才會同步,顯然這是非常不可取的,如果是這樣的話豈不是每時每刻都要重啟服務(wù)器,那將是多么大的災(zāi)難!
二、業(yè)務(wù)場景
這里我只說一個場景吧,其他場景都是一樣的處理辦法,場景為:假設(shè)我們將用戶數(shù)據(jù)放入到redis中,此時有新用戶注冊,在數(shù)據(jù)庫中會插入一條新數(shù)據(jù),與此同時要在redis中也插入該條數(shù)據(jù),以便于下次查詢的時候顯示最新數(shù)據(jù)。
我們先來看一下默認不使用任何處理的情況下redis是否會為我們做一致性操作,現(xiàn)在我的測試數(shù)據(jù)庫中有18條用戶數(shù)據(jù),此時我們啟動系統(tǒng)后注冊插入第19條數(shù)據(jù)后看下redis中是否有19條。
經(jīng)過注冊之后我現(xiàn)在給數(shù)據(jù)庫中插入了第19條數(shù)據(jù)
接著我們還是使用上篇提到過的查詢緩存的方法來獲取下所有信息,我們直接來看第最后一條,可以看到最后是潤青而不是十九,所以redis默認是沒有替我們做緩存一致操作的。
三、緩存一致性實現(xiàn)(方案1)
其實,要想實現(xiàn)一致性很簡單,當我們在進行插入操作之后,我們把該條數(shù)據(jù)取出來同時保存到redis緩存中去,這樣再次查詢緩存的時候我們也可以看到新的數(shù)據(jù),代碼如下:
需要注意的是:我這里直接是調(diào)用JPA的findAll(),其實更好的做法是根據(jù)id去更新剛插入的那一條,這樣效率才高,這里只是演示如何實現(xiàn),接著再來注冊一條新數(shù)據(jù),看看是否可以在緩存中同時看到:新插入的數(shù)據(jù)id為29,我們來看下緩存是否存在該條新數(shù)據(jù)
四、redis緩存一致性實現(xiàn)(方案2)
定期清除redis中的數(shù)據(jù),例如設(shè)置一個定時任務(wù),每當一個小時的時候就會清除redis中的數(shù)據(jù),也就是讓redis中的數(shù)據(jù)失效,然后再次保存、刪除的時候之前的 redis中的數(shù)據(jù)已經(jīng)不存在,所以相當于是將數(shù)據(jù)重新設(shè)置到redis中去,所以可以保證數(shù)據(jù)的一致性。
原文鏈接:https://blog.csdn.net/qq_32967665/article/details/86493749
相關(guān)推薦
- 2022-05-17 ribbon和nacos獲取服務(wù)列表不一致問題
- 2023-12-14 【cchardet模塊】報出 “from cchardet import _cchardet Imp
- 2022-08-03 C++類與對象深入之構(gòu)造函數(shù)與析構(gòu)函數(shù)詳解_C 語言
- 2022-08-01 C#中把FastReport.Net報表控件的數(shù)據(jù)保存到數(shù)據(jù)庫_C#教程
- 2022-08-29 .NET?Core自定義配置文件_實用技巧
- 2023-08-15 解決chrome升級后跨域跳轉(zhuǎn)cookie無法攜帶問題
- 2022-07-10 fastmock使用-只能模擬get請求
- 2022-12-10 關(guān)于torch中tensor數(shù)據(jù)類型的轉(zhuǎn)換_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支