讀寫分離-延時問題-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行的異常spa

 

分析:讀寫分離採用了主從複製,當寫庫有修改操做時,會記錄在binlog日誌中,完了從庫會同步binlog日誌中的信息,進而保持跟主庫數據一致,但主庫修改到從庫同步完成,是須要時間的而代碼在執行第完第3行,會當即執行第5行即查詢操做,而此時,從庫的同步可能併爲完成,因此就會形成查詢的resCoupons 爲空。日誌

 

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

相關文章
相關標籤/搜索