讀寫分離-延時問題-1


代碼主要邏輯如下:

 1 public void createCoupons(ReqCreateAndBindCouponDTO request) {
 2         // 1.創建優惠券組及多張優惠券(寫庫)
 3         int groupId = createCouponGroupAndCoupons(request);
 4         // 2.根據券組ID獲取生成的優惠券(讀庫)
 5         List<CouponDTO> resCoupons = couponService.selectCoupon(groupId);
 6         if (resCoupons == null || resCoupons.size() == 0) {
 7             throw new RuntimeException("查詢優惠券失敗,groupId=" + groupId);
 8         }
 9        // 3.返回
10         return resCoupons;
11     }

業務邏輯:需要創建一組優惠券,(一個優惠券組下可以有多張優惠券),創建優惠券后,根據優惠券組ID查詢出其下的優惠券,將券號返回!本着讀寫分離模式,修改數據庫表操作在寫庫,查詢數據操作在讀庫,所以步驟一應該是寫庫,步驟二應該是讀庫

 

問題:在實際操作中會發現,執行第二步的時候經常會拋出如代碼第7行的異常

 

分析:讀寫分離采用了主從復制,當寫庫有修改操作時,會記錄在binlog日志中,完了從庫會同步binlog日志中的信息,進而保持跟主庫數據一致,但主庫修改到從庫同步完成,是需要時間的而代碼在執行第完第3行,會立即執行第5行即查詢操作,而此時,從庫的同步可能並為完成,所以就會造成查詢的resCoupons 為空。

 

解決辦法:在應對此類問題時最簡單的辦法就是將步驟二的查詢操作改為寫庫,即從主庫查詢數據,此時就避免了由於主從延時問題導致從庫來不及同步的問題!額,雖然說查詢操作應該從從庫查詢,但總得保證功能不會出錯吧,然后再考慮性能問題


免責聲明!

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



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