第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

get_lock(str,timeout)函數(shù)使用。

get_lock(str,timeout)函數(shù)使用。

躍然一笑 2019-03-29 23:19:29
在DB層面實(shí)現(xiàn)分布式鎖的方法有:利用MySQL的內(nèi)置函數(shù) get_lock(key, timeout)來(lái)實(shí)現(xiàn),這個(gè)函數(shù)的約定在指定時(shí)間內(nèi)持有鎖,它鎖的是一行中的某一個(gè)字段么?還是鎖的是一行?具體項(xiàng)目中是如何使用的?查了一些資料,大概是先約定同一個(gè)key,然后先執(zhí)行g(shù)et_lock(key,timeout)的,會(huì)持有鎖,其他的sql只能等待;除非當(dāng)前的線(xiàn)程釋放鎖release(key),但是它是如何在項(xiàng)目中控制鎖的粒度呢?最好有實(shí)例能詳解一下。謝謝~~
查看完整描述

1 回答

?
慕碼人8056858

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊

這個(gè)鎖是應(yīng)用程序級(jí)別的,在不同的mysql會(huì)話(huà)之間使用。它只是個(gè)名字鎖,跟你理解的表啊行啊字段啊都沒(méi)有直接關(guān)系,具體是鎖什么完全交給應(yīng)用程序。它是一種獨(dú)占鎖,意味著哪個(gè)會(huì)話(huà)持有這個(gè)鎖,其他會(huì)話(huà)嘗試拿這個(gè)鎖的時(shí)候都會(huì)失敗。

比如你想鎖一行記錄record A,那么當(dāng)前會(huì)話(huà)里你建一個(gè)鎖get_lock("record A", 10)。此時(shí)其他所有會(huì)話(huà)依然可以隨便訪問(wèn)和修改record A,除非他們顯式的也調(diào)用get_lock("record A", 10)。

也就是說(shuō)完全是你的應(yīng)用程序來(lái)決定檢不檢查鎖。你如果想鎖,就讓所有會(huì)話(huà)在訪問(wèn)record A的時(shí)候都顯式的調(diào)用get_lock("record A", 10),那明顯只有一個(gè)會(huì)話(huà)能成功。其他會(huì)話(huà)只有等超時(shí)或者持有鎖的會(huì)話(huà)調(diào)用release_lock后才能重新拿到鎖

同理,你想鎖一個(gè)字段column A,那跟上面一樣建一個(gè)鎖get_lock("column A", 10)。總之,拿不拿鎖是應(yīng)用程序來(lái)決定的,數(shù)據(jù)庫(kù)只是提供這個(gè)機(jī)制??创蠹沂欠駬屚话焰i,也是純粹看第一個(gè)參數(shù)鎖名字這個(gè)字符串一樣不一樣,所以最佳實(shí)踐是在鎖名字前面加上表名和數(shù)據(jù)庫(kù)名,以免誤傷


查看完整回答
反對(duì) 回復(fù) 2019-04-23
  • 1 回答
  • 0 關(guān)注
  • 560 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)