1. 程式人生 > >解決併發導致資料異常問題

解決併發導致資料異常問題

通常我們資料異常是由於併發導致的,那麼我們如何避免這種問題呢?

舉例:

當用戶買充值卡時,我們一般會先查取資料庫,然後改資料狀態,給使用者返回充值卡號,那問題來了

當同一時刻的使用者一起購買充值卡時,就可能造成買到同一個充值卡,從而導致資料異常

解決方案:

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查詢到改資料返回給使用者,這樣我們就可以      不用鎖機制來完成併發問題了!

當然這只是程式碼層面問題,如果是因為伺服器承受不住壓力的話,我們應該考慮伺服器架構方面的問題!