日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Redis和数据库的结合

發布時間:2025/3/12 数据库 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Redis和数据库的结合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用 Redis 可以優化性能,但是存在 Redis 的數據和數據庫同步的問題,這是我們需要關注的問題。假設兩個業務邏輯都是在操作數據庫的同一條記錄,而 Redis 和數據庫不一致。

Redis 和數據庫不一致

在圖中,T1 時刻以鍵 key1 保存數據到 Redis,T2 時刻刷新進入數據庫,但是 T3 時刻發生了其他業務需要改變數據庫同一條記錄的數據,但是采用了 key2 保存到 Redis 中,然后又寫入了更新數據到數據庫中,此時在 Redis 中 key1 的數據是臟數據,和數據庫的數據并不一致。

而上圖只是數據不一致的一個可能的原因,實際情況可能存在多種,比如數據庫的事務是完善的,而對于 Redis 的事務,通過學習應該清楚它并不是那么嚴格的,如果發生異常回滾的事件,那么 Redis 的數據可能就和數據庫不太一致了,所以要保存數據的一致性是相當困難的。

但是不用沮喪,因為互聯網系統顯示給用戶的信息往往并不需要完全是“最新的”,有些數據允許延遲。舉個例子,一個購物網站會有一個用戶購買排名榜,如果做成實時的,每一筆投資都會引發重新計算,那么網站的性能就存在極大的壓力,但是這個排名榜卻沒有太大的意義。

同樣,商品的總數有時候只需要去實現一個非實時的數據。這些在互聯網系統中也是十分常見的,一般而言,可以在某段時間進行刷新(比如以一個小時為刷新間隔),排出這段時間的最新排名,這就是延遲性的更新。但是對于一些內容則需要最新的,尤其是當前用戶的交易記錄、購買時商品的數量,這些需要實時處理,以避免數據的不一致,因為這些都是對于企業和用戶重要的記錄。

我們會考慮讀/寫以數據庫的最新記錄為主,并且同步寫入 Redis,這樣數據就能保持一致性了,而對于一些常用的只需要顯示的,則以查詢 Redis 為主。。

Redis 和數據庫讀操作

數據緩存往往會在 Redis 上設置超時時間,當設置 Redis 的數據超時后,Redis 就沒法讀出數據了,這個時候就會觸發程序讀取數據庫,然后將讀取的數據庫數據寫入 Redis(此時會給 Redis 重設超時時間),這樣程序在讀取的過程中就能按一定的時間間隔刷新數據了。

讀取數據的流程

下面寫出這個流程的代碼:

public DataObject readMethod(args) {// 嘗試從Redis中讀取數據DataObject data = getRedis(key);if(data != null) {// 讀取數據返回為空,失敗// 從數據庫中讀取數據data = getFromDataBase();// 重新寫入Redis,以便以后讀出writeRedis(key,data);// 設置Redis的超時時間為5分鐘setRedisExpire(key,5);}return data; }

上面的代碼完成了圖中所描述的過程。這樣每當讀取 Redis 數據超過 5 分鐘,Redis 就不能讀到超時數據了,只能重新從 Redis 中讀取,保證了一定的實時性,也避免了多次訪問數據庫造成的系統性能低下的情況。

Redis 和數據庫寫操作

寫操作要考慮數據一致的問題,尤其是那些重要的業務數據,所以首先應該考慮從數據庫中讀取最新的數據,然后對數據進行操作,最后把數據寫入 Redis 緩存中。

寫入數據的流程

寫入業務數據,先從數據庫中讀取最新數據,然后進行業務操作,更新業務數據到數據庫后,再將數據刷新到 Redis 緩存中,這樣就完成了一次寫操作。

下面寫出這個流程的代碼:

public DataObject writeMethod(args) {//從數據庫里讀取最新數據DataObject dataObject = getFromDataBase(args);//執行業務邏輯ExecLogic(dataObject);//更新數據庫數據updateDataBase(dataObject);//刷新Redis緩存updateRedisData(dataObject); }

上面的代碼完成了圖中所描述的過程。首先,從數據庫中讀取最新的數據,以規避緩存中的臟數據問題,執行了邏輯,修改了部分業務數據。然后,把這些數據保存到數據庫里,最后,刷新這些數據到 Redis 中。

總結

以上是生活随笔為你收集整理的Redis和数据库的结合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。