日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql中的get_lock锁机制解析

發(fā)布時(shí)間:2024/1/23 数据库 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql中的get_lock锁机制解析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

GET_LOCK(key,timeout)? 需要兩個(gè)連接會(huì)話
RELEASE_LOCK(key)? 鎖是否釋放,釋放了返回1
IS_FREE_LOCK(key)? 返回當(dāng)前連接ID,表示名稱為'xxxx'的鎖正在被使用。
?? ?key 鎖的名字,timeout加鎖等待時(shí)間,時(shí)間內(nèi)未加鎖成功則事件回滾。get_lock 加鎖成功返回1,
?? ?這個(gè)鎖是應(yīng)用程序級(jí)別的,在不同的mysql會(huì)話之間使用,是名字鎖,不是鎖具體某個(gè)表名或字段,具體是鎖什么完全交給應(yīng)用程序。它是一種獨(dú)占鎖,意味著哪個(gè)會(huì)話持有這個(gè)鎖,其他會(huì)話嘗試拿這個(gè)鎖的時(shí)候都會(huì)失敗。
?? ?session A select get_lock('test',1);
?? ?session B select get_lock('test',5);
?? ?可以指定表也可以不指定
?? ?直到關(guān)閉連接會(huì)話結(jié)束,鎖才會(huì)釋放,但不像redis那樣加了鎖只要不主動(dòng)釋放就一直有。
?? ?但是當(dāng)會(huì)話1 get_lock 后,未釋放。會(huì)話2 不get_lock 同一個(gè)key,或者就不get_lock,依然可以對(duì)數(shù)據(jù)進(jìn)行任何操作,所以加鎖只是說人為的主觀的想要讓某些操作同時(shí)只有一個(gè)連接能進(jìn)行操作,別的連接不調(diào)用get_lock加同一個(gè)鎖,那它不會(huì)受到任何影響,想干什么干什么。

session1

?

?

?session2

?

?

?

get_lock:但是當(dāng)會(huì)話1 get_lock 后,未釋放。會(huì)話2 不get_lock 同一個(gè)key,或者就不get_lock,依然可以對(duì)數(shù)據(jù)進(jìn)行任何操作,所以加鎖只是說人為的主觀的想要讓某些操作同時(shí)只有一個(gè)連接能進(jìn)行操作,別的連接不調(diào)用get_lock加同一個(gè)鎖,那它不會(huì)受到任何影響,想干什么干什么。

session1

session2

?

?

?

?

優(yōu)缺點(diǎn)分析?(1)這種方式對(duì)于更新所有列比較有效,但是得把查詢的語句也放在鎖內(nèi)執(zhí)行;?(2)這種方式當(dāng)客戶端無故斷線了會(huì)自動(dòng)釋放鎖,比較好,不像redis鎖那樣,如果加完鎖斷了,那么鎖一直在;?(3)這種方式是針對(duì)鎖內(nèi)的所有操作加鎖,并不針對(duì)特定表或特定行,所以使用了同一個(gè)Key的鎖但不同的操作都會(huì)共用一把鎖,會(huì)導(dǎo)致效率低下;?(4)如果查詢語句放在鎖之前,則數(shù)據(jù)可能是舊的,更新之后會(huì)把查詢之后更新之前別的客戶端更新的數(shù)據(jù)覆蓋掉;

總結(jié)

以上是生活随笔為你收集整理的mysql中的get_lock锁机制解析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。