強制讀主過於粗暴,畢竟只有少量寫請求,很短時間,可能讀取到髒資料。有沒有可能實現,只有這一段時間,可能讀到從庫髒資料的讀請求讀主,平時讀從呢?
可以利用乙個快取記錄必須讀主的資料。
如上圖,當寫請求發生時:
(1)寫主庫
(2)將哪個庫,哪個表,哪個主鍵三個資訊拼裝乙個key設定到cache裡,這條記錄的超時時間,設定為「主從同步時延」
畫外音:key的格式為「db:table:pk」,假設主從延時為1s,這個key的cache超時時間也為1s。
如上圖,當讀請求發生時:
這是要讀哪個庫,哪個表,哪個主鍵的資料呢,也將這三個資訊拼裝乙個key,到cache裡去查詢,如果,
(1)cache裡有這個key,說明1s內剛發生過寫請求,資料庫主從同步可能還沒有完成,此時就應該去主庫查詢
(2)cache裡沒有這個key,說明最近沒有發生過寫請求,此時就可以去從庫查詢
以此,保證讀到的一定不是不一致的髒資料。
多mysql例項下開發需要注意主從同步延遲
今天晚上伺服器上線測試,遇到了乙個問題!往資料庫寫了一條資料之後,再讀取該記錄,居然讀不出來,報空指標。十分費解,喊來開發組長定位問題。他的解釋是 寫操作用的是主庫,而讀操作用的是從庫。在寫庫寫完之後,該條記錄並不會立刻出現在讀庫,資料同步到從庫需要一定的時間。於是出現了我的空指標異常。回來看了很多...
多mysql例項下開發需要注意主從同步延遲
今天晚上伺服器上線測試,遇到了乙個問題!往資料庫寫了一條資料之後,再讀取該記錄,居然讀不出來,報空指標。十分費解,喊來開發組長定位問題。他的解釋是 寫操作用的是主庫,而讀操作用的是從庫。在寫庫寫完之後,該條記錄並不會立刻出現在讀庫,資料同步到寫庫需要一定的時間。於是出現了我的空指標異常。回來看了很多...
mysql主從同步原理
主從同步 實際上,你讀的主庫和從庫都可以,但是寫的肯定是進入到主庫里,然後從庫在讀binlog,從庫同步 binlog檔案是以二進位制形式儲存的 主庫執行 sql 寫binglog 同步到從庫執行 什麼叫同步,就是insert 或者update或者delete 都會操作主庫,每執行一條語句,都會寫入...