通常我們資料異常是由於併發導致的,那麼我們如何避免這種問題呢?
舉例:當使用者買充值卡時,我們一般會先查取資料庫,然後改資料狀態,給使用者返回充值卡號,那問題來了
當同一時刻的使用者一起購買充值卡時,就可能造成買到同乙個充值卡,從而導致資料異常
解決方案:
1、如果併發並不是很高的情況下,我們可以考慮悲觀鎖,利用排它鎖我們可以來使資料保持正常,但是在高併發的情況下,有可 能會導致等待的程式過多而增加伺服器負荷,使之崩潰!
2、考慮到解決方案1的問題,我們可以先修改資料的狀態,然後再查取資料給使用者返回,那這樣的話我們獲取修改資料的id就是關 鍵了,我們可以用mysql中的乙個函式來解決這個問題,例如:「update table set 'status'=1,'id'=last_insert_id(id) where status=0 limit 1」,然後用:"select last_insert_id()"就可以得到被修改資料的id;通過id查詢到改資料返回給使用者,這樣我們就可以 不用鎖機制來完成併發問題了!
當然這只是**層面問題,如果是因為伺服器承受不住壓力的話,我們應該考慮伺服器架構方面的問題!
Go map併發讀寫異常導致服務崩潰
昨天突然接到報警說服務埠丟失,也就是服務崩潰,看了錯誤日誌,發現是map併發讀寫問題,記錄下來,避免再犯類似錯誤。發現是呼叫json.marshal時出錯了,錯誤統計如下,都是併發讀寫map之類的異常。229次錯誤 fatal error concurrent map iteration and m...
解決kafka ISR缺失嚴重導致消費異常的方法
且flume端的消費組一直在rebalance。嘗試調整引數 flume sink 檔案依舊為空,再次調大此引數依舊沒用,flume的consumergroup依舊顯示在rebalancing 因為之前出現過類似isr缺失的現象,當時增大了此引數 num.replica.fetchers leade...
併發事務所導致的問題
當同乙個應用程式或者不同應用程式中的多個事務在同乙個資料集上併發執行時 可能會出現許多意外的問題 併發事務所導致的問題可以分為下面三種型別 髒讀 對於兩個事物 t1,t2,t1 讀取了已經被 t2 更新但 還沒有被提交的字段 之後 若 t2 回滾 t1 讀取的內容就是臨時且無效的.不可重複讀 對於兩...