課程
/后端開(kāi)發(fā)
/Java
/Java高并發(fā)秒殺API之高并發(fā)優(yōu)化
我知道使用為了優(yōu)化,但是不知道為什么。
2017-06-20
源自:Java高并發(fā)秒殺API之高并發(fā)優(yōu)化 3-1
正在回答
原來(lái)執(zhí)行的流程
update(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間) + insert(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間)
因?yàn)閡pdate同一行會(huì)導(dǎo)致行級(jí)鎖,而insert是可以并行執(zhí)行的。
1.如果先update, update在前面會(huì)加鎖
鎖 + update(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間) +?insert(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間) + 提交鎖
其實(shí)的線程就要等,這個(gè)鎖提交才能執(zhí)行。
2.如果先insert,
insert(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間) + ?鎖+ update(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間)?+ 提交鎖
其實(shí)的線程可以并發(fā)insert. 這樣子會(huì)減少鎖的時(shí)長(zhǎng)
慕粉18810003712 提問(wèn)者
慕村8951117
https://blog.csdn.net/and1kaney/article/details/51214001
看場(chǎng)景二。
insert是會(huì)加鎖的,但是這個(gè)鎖不影響同時(shí)插入。什么叫并發(fā)?并發(fā)指的是多線程對(duì)統(tǒng)一資源進(jìn)行爭(zhēng)奪。但是當(dāng)我們對(duì)同一張表中并發(fā)寫(xiě)入的時(shí)候,對(duì)什么資源進(jìn)行爭(zhēng)奪了呢?從場(chǎng)景2中可以很明顯的看出,當(dāng)有兩個(gè)事物都在insert的時(shí)候,在commit之前都可以插入。
好的,那解釋一下為什么insert要放在update之前:
1.因?yàn)閕nsert的通過(guò)用戶id+商品id作為聯(lián)合主鍵,因此實(shí)際上插入操作是可以并行的。2.如果某個(gè)用戶多次刷新提交數(shù)據(jù),都會(huì)被判定為是無(wú)效數(shù)據(jù),無(wú)需update。
簡(jiǎn)單來(lái)講就是insert在后面的話就會(huì)等鎖競(jìng)爭(zhēng),放到前面了insert就可以并行執(zhí)行了,當(dāng)中就少了insert占用的時(shí)間了,放后面會(huì)等兩個(gè)鎖競(jìng)爭(zhēng),放前面就等一個(gè)鎖。
舉報(bào)
Java實(shí)現(xiàn)高并發(fā)秒殺API的第四門(mén)課,小伙伴一定可以從中受益
1 回答java高并發(fā)秒殺API之業(yè)務(wù)分析
3 回答求Java高并發(fā)秒殺課程源碼
2 回答優(yōu)化分析高并發(fā)課程
1 回答《java高并發(fā)秒殺API》實(shí)現(xiàn)之后怎么進(jìn)行性能測(cè)試??
1 回答關(guān)于update和insert順序的問(wèn)題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢(xún)優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2017-06-21
原來(lái)執(zhí)行的流程
update(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間) + insert(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間)
因?yàn)閡pdate同一行會(huì)導(dǎo)致行級(jí)鎖,而insert是可以并行執(zhí)行的。
1.如果先update, update在前面會(huì)加鎖
鎖 + update(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間) +?insert(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間) + 提交鎖
其實(shí)的線程就要等,這個(gè)鎖提交才能執(zhí)行。
2.如果先insert,
insert(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間) + ?鎖+ update(發(fā)送在mysql網(wǎng)絡(luò)時(shí)間+gc時(shí)間)?+ 提交鎖
其實(shí)的線程可以并發(fā)insert. 這樣子會(huì)減少鎖的時(shí)長(zhǎng)
2019-03-14
https://blog.csdn.net/and1kaney/article/details/51214001
看場(chǎng)景二。
insert是會(huì)加鎖的,但是這個(gè)鎖不影響同時(shí)插入。什么叫并發(fā)?并發(fā)指的是多線程對(duì)統(tǒng)一資源進(jìn)行爭(zhēng)奪。但是當(dāng)我們對(duì)同一張表中并發(fā)寫(xiě)入的時(shí)候,對(duì)什么資源進(jìn)行爭(zhēng)奪了呢?從場(chǎng)景2中可以很明顯的看出,當(dāng)有兩個(gè)事物都在insert的時(shí)候,在commit之前都可以插入。
好的,那解釋一下為什么insert要放在update之前:
1.因?yàn)閕nsert的通過(guò)用戶id+商品id作為聯(lián)合主鍵,因此實(shí)際上插入操作是可以并行的。2.如果某個(gè)用戶多次刷新提交數(shù)據(jù),都會(huì)被判定為是無(wú)效數(shù)據(jù),無(wú)需update。
2018-07-29
簡(jiǎn)單來(lái)講就是insert在后面的話就會(huì)等鎖競(jìng)爭(zhēng),放到前面了insert就可以并行執(zhí)行了,當(dāng)中就少了insert占用的時(shí)間了,放后面會(huì)等兩個(gè)鎖競(jìng)爭(zhēng),放前面就等一個(gè)鎖。