一些常見問題的實際處理方案

一.數據庫主從延遲

目前,做了一個登陸系統,數據庫採用主從複製,偶爾會存在註冊用戶後,用戶登陸卻不存在,這是因爲登陸的時候是從讀庫中去讀取的數據,然而數據同步還沒到位,因此我採用的方案是:

(1)在註冊的時候將該條數據放入redis當中(需要注意的是,用戶的登陸方式有幾種,就需要把幾種唯一標識符都放入進去,例如,手機,微信,qq等)。

(2)在登陸的時候,先從緩存當中讀取,如果還是沒有的話,就可以通知客服了。

 

二.緩存與數據庫一致性問題。

先提問吧。假設現在有兩個線程:線程A,讀線程,已經讀出數據,在set緩存的時候被掛起。線程B,寫線程,這時候已經寫入數據,然後進行緩存操作(可以刪除,可以寫入),當B執行完畢以後纔會執行A。

那這個時候如果B選擇刪除,那麼A就會寫入緩存當中,這個時候緩存裏面其實是髒數據,因此這種方式我認爲不太合適。

那麼就採用B寫入緩存的方式,這樣的原因就在於讀線程A,在讀緩存和寫緩存不是一個同步操作,因此可以考慮把線程A的讀寫數據放入一個同步操作裏面,例如redis的lua腳本if(get key ==null) set key value這樣的形式即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章