Redis 如何與數據庫事務保持一致


考慮一個問題,redis 如何 與 數據庫保持一致性的問題。

舉栗子:如果我們在開發過程中遇到這樣的一種情況,我們刪除 redis中token 的同時 也需要修改數據庫中 儲存的 token 的狀態為不可用的狀態。如果這個時候我們不做處理的話,通常是先刪除redis中的token,然后在進行數據庫的修改。但是如果這個時候redis中的token刪除成功了,但是在執行數據庫操作之氣程序報錯了。那這個時候redis中的token已經被刪除了,但是數據庫中的token狀態還是可用的狀態,這個時候就導致了數據不一致的問題。

這時候我們需要使用統一的事務來進行解決這個問題,.但是如果只是單純的使用數據庫事務並不能解決這個問題,因為這個操作也涉及到了redis,所以這個時候我們應該使用 redis事務+數據庫的事務 來保證事務一致性的問題。

如果只是單純添加了 @Transactional(聲明式事務)只能保證數據庫的數據一致性問題,但是是無法控制redis中的事務的。redis中也是存在事務的。

解決方案:

我們可以使用自定義方法使用編程式事務 我們使用 begin(即控制reids事務也控制數據庫事務)、commit、rollback 都需要實現控制redis事務和數據庫事務。

 

如果redis值與數據庫值不一致的情況下,我們只需要把redis中的值清除掉,然后下一次訪問的時候就會查詢數據庫然后直接存放在redis中即可。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM