解決併發導致資料異常問題
通常我們資料異常是由於併發導致的,那麼我們如何避免這種問題呢?
舉例:
當用戶買充值卡時,我們一般會先查取資料庫,然後改資料狀態,給使用者返回充值卡號,那問題來了
當同一時刻的使用者一起購買充值卡時,就可能造成買到同一個充值卡,從而導致資料異常
解決方案:
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查詢到改資料返回給使用者,這樣我們就可以 不用鎖機制來完成併發問題了!
當然這只是程式碼層面問題,如果是因為伺服器承受不住壓力的話,我們應該考慮伺服器架構方面的問題!
相關推薦
解決併發導致資料異常問題
通常我們資料異常是由於併發導致的,那麼我們如何避免這種問題呢? 舉例: 當用戶買充值卡時,我們一般會先查取資料庫,然後改資料狀態,給使用者返回充值卡號,那問題來了 當同一時刻的使用者一起購買充值卡時,就可能造成買到同一個充值卡,從而導致資料異常 解決方案: 1、如果併發並不是
org.springframework.web.HttpMediaTypeNotAcceptableException,由點斷解決方案導致的異常
del png RR amp work ram 地址 sage accept 錯誤發生的地方 @DeleteMapping("{fileName:.+}") public SerializeObject delete(@RequestHeader String a
REDIS 學習(8)併發導致的異常
用到redis的專案發現異常如下: redis.clients.jedis.exceptions.JedisDataException: redis.clients.jedis.exceptions.
解決異常斷電導致資料被損壞的問題
原因:拿到問題機器,把data/system/users/0/settings_global.xml匯出來,provisioned值確實變成0了,如下: 另外,如果在正常的機器上,手動把這個值改成0,同樣能復現這個現象。 所以,我們暫時把\frameworks\base\packages\
伺服器資料恢復通用方法/伺服器硬碟故障導致資料丟失解決方案
[伺服器資料恢復原因推斷] 伺服器資料丟失情況很多,通常無法明確伺服器資料丟失的原因,常見的丟失原因有:伺服器硬碟出現故障,管理員或者伺服器自動進行fsck操作,這一操作可能造成更加嚴重資料丟失或者導致伺服器資料恢復的難度增加。伺服器資料丟失後執行mkfs操作,若操作未完成則容易導致部分塊組全部
解決Linux下網路程式設計(sendto send )出現 SIGPIPE 訊號導致程式異常終止的問題
引言 最近在Linux下網路程式設計時,出現SIGPIPE 訊號導致程式異常終止,本文記錄下解決的方法以及相應的知識。 SIGPIPE 訊號資料 什麼時候出現此訊號,APUE中有關此訊號的解釋如下: Linux man手冊有關此訊號的解釋: man 7 signal SI
解決mysql插入資料時出現Incorrect string value: '\xF0\x9F...' for column 'name' at row 1的異常
這個問題,原因是UTF-8編碼有可能是兩個、三個、四個位元組。Emoji表情或者某些特殊字元是4個位元組,而MySQL的utf8編碼最多3個位元組,所以資料插不進去。 我的解決方案是這樣的 1.在mysql的安裝目錄下找到my.ini,作如下修改: [mysqld] character
maven 由於傳遞依賴導致的引入低版本jar包導致classnotfind異常問題解決
maven匯入jar包時,可能由於不同jar包之間依賴了不同版本的另外的jar包,會導致classnotfind異常。 舉個我遇到的例子: <dependency> <groupId>org.glassfis
迭代器迭代元素,迭代器修改元素;集合集合遍歷元素集合修改元素解決併發修改異常
import java.util.ArrayList;import java.util.List;import java.util.ListIterator;public class TextDemo1
解決 Mybatis Generator由表字段使用關鍵字導致的異常方案
引言 前幾天由於用python拉取第三方介面的資料以後,他們直接返回建表的欄位和命令,也就說我們必須按照他們設定的欄位名稱來使用,他們的命名裡面有很多的mysql的關鍵字,這就說我們寫sql的時候,需要注意關鍵字,但是我們後端用的mybatis Generator,這就導致
php解決下單、抽獎併發導致的庫存負數的問題
我們知道資料庫處理sql是一條條處理的,假設購買商品的流程是這樣的: sql1:查詢商品庫存 if(庫存數量 > 0) { //生成訂單... sql2:庫存-1 } 當沒有併發時,上面的流程看起來是如此完美,假設同時兩個人下單,而庫存只有1
PHP解決網站大資料大流量與高併發
1:硬體方面 普通的一個p4的伺服器每天最多能支援大約10萬左右的IP,如果訪問量超過10W那麼需要專用的伺服器才能解決,如果硬體不給力 軟體怎麼優化都是於事無補的。主要影響伺服器的速度 有:網路-硬碟讀寫速度-記憶體大小-cpu處理速度。 2:軟體方面 第一個要說的
mysql 針對高併發下,同時修改單條資料發生衝突導致資料錯誤的問題(例如:高併發下單,導致庫存為負數)
畢業後第一次做的專案就是電商,但是當時也不明白這個問題。 所以給自己埋下一個坑。 先說說當初的做法,和遇到的問題。 //開啟事務 start transaction; //查詢庫存 select number from item where id = 1; //如果大於購買
解決HRESULT:0x80070057 (E_INVALIDARG)異常 導致介面控制元件無法顯示
方案:清除 系統盤:\使用者\使用者名稱稱\AppData\Local\Temp\Temporary ASP.NET Files裡面的檔案 C:\Users\<name>\AppData\Local\Temp\Temporary ASP.NET Files
activeMQ高併發傳送訊息異常解決方法
高併發傳送訊息異常解決方法:現象:使用10個執行緒每100ms傳送一條訊息,大約3000多條後,出現異常,所有執行緒停 止:javax.jms.JMSException:Could not connect to brokerURL: tcp://loc
JavaBinder: !!! FAILED BINDER TRANSACTION !!! intent傳遞大資料異常解決
在使用intent傳遞集合資料的時候,報了JavaBinder: !!! FAILED BINDER TRANSACTION !!! 錯誤,翻譯成中文就是“繫結器事務失敗”,實際的原因就是使用intent的時候攜帶的資料太大導致傳遞失敗。  
解決.net Core中WebApi自動Model驗證導致資料格式不能統一
最近做專案用WebAPI Core時,想把返回資料的格式,統一弄成:{“errorMsg”:"xxx","Data":"xxxx"}這種。誰知道,WebAPI的model會自動驗證,於是乎格式成了: 我想能不能自己像在MVC裡面那樣自己控制model驗證:ModelState.IsValid。找了很
併發帶來的問題——三種常見的讀資料異常現象
如果說資料不在ACID特性的保護下會發生不一致的現象,那麼: 在ACID的保護下,是不是資料就一定不會產生不一致的現象呢? 在關係資料庫系統中,多個會話(session)可以訪問同一個資料庫的
VS2010按任意鍵出錯的解決 與 遇到了異常,可能是由某個擴充套件導致的
參考: http://blog.sina.com.cn/s/blog_403638c60100muxh.html http://blog.csdn.net/wangqiulin123456/article/details/8791507 我這裡的情況是 xp sp3