mysql的鎖有幾種 怎么理解數(shù)據(jù)庫的鎖。一般鎖分別哪幾種?
怎么理解數(shù)據(jù)庫的鎖。一般鎖分別哪幾種?數(shù)據(jù)庫是許多用戶使用的共享資源。當(dāng)多個(gè)用戶同時(shí)訪問數(shù)據(jù)時(shí),多個(gè)事務(wù)將同時(shí)訪問相同的數(shù)據(jù)。如果不控制并發(fā)操作,可能會(huì)讀取和存儲(chǔ)不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。鎖是
怎么理解數(shù)據(jù)庫的鎖。一般鎖分別哪幾種?
數(shù)據(jù)庫是許多用戶使用的共享資源。當(dāng)多個(gè)用戶同時(shí)訪問數(shù)據(jù)時(shí),多個(gè)事務(wù)將同時(shí)訪問相同的數(shù)據(jù)。如果不控制并發(fā)操作,可能會(huì)讀取和存儲(chǔ)不正確的數(shù)據(jù),破壞數(shù)據(jù)庫的一致性。鎖是實(shí)現(xiàn)數(shù)據(jù)庫并發(fā)控制的一項(xiàng)重要技術(shù)。當(dāng)事務(wù)在對(duì)數(shù)據(jù)對(duì)象進(jìn)行操作之前向系統(tǒng)發(fā)出鎖定數(shù)據(jù)對(duì)象的請(qǐng)求時(shí)。鎖定后,事務(wù)對(duì)數(shù)據(jù)對(duì)象具有一定的控制權(quán)。在事務(wù)釋放鎖之前,其他事務(wù)無法更新數(shù)據(jù)對(duì)象。數(shù)據(jù)庫中的鎖有兩種基本類型:獨(dú)占鎖(x鎖)和共享鎖(s鎖)。當(dāng)對(duì)數(shù)據(jù)對(duì)象應(yīng)用獨(dú)占鎖時(shí),其他事務(wù)無法讀取和修改它。具有共享鎖的數(shù)據(jù)對(duì)象可以被其他事務(wù)讀取,但不能修改。數(shù)據(jù)庫使用這兩種基本鎖類型來控制數(shù)據(jù)庫事務(wù)的并發(fā)性。
什么時(shí)候需要分布式鎖?
首先,我們需要知道在非分布式環(huán)境中使用鎖可以解決什么問題?
多線程環(huán)境,共享資源線程安全問題!此時(shí),共享資源通常在一臺(tái)機(jī)器的多線程中競爭。從JAVA內(nèi)存模型的角度來看,我們可以通過鎖定對(duì)象、方法和代碼塊來避免共享資源的競爭
!1,生成全局ID;
2,修改全局配置文件;
3,分布式服務(wù)中的seckill;
4,分布式環(huán)境中的重復(fù)提交;
1,使用數(shù)據(jù)庫的唯一主鍵實(shí)現(xiàn)鎖定
!2、使用redis指令:通常使用setnx方法,incr方法實(shí)現(xiàn)
3、使用zookeeper:使用API生成臨時(shí)節(jié)點(diǎn)實(shí)現(xiàn)鎖定!