Mysql

Mysql 鎖定 - 如何為每個 userId 在數據庫中獲取鎖定

  • December 18, 2021

您好我有一個執行來自多個使用者的請求的 J2EE 伺服器(集群)。

我希望給定使用者的每個請求都將像這樣處理:

{
 acquireLockForUser(userId); // i.e. insert a lock row for a dedicated table
 doSomeStuffInDbForUser(user);
 releaseLock(userId);  // i.e. delete a lock row from the dedicated table
}

這將確保每個使用者請求將由我的伺服器的單個執行緒處理。

實現這一目標的方法是什麼?(是否可以通過 id 插入表“userLock”並鎖定它?如何從這個“鎖定”表中插入\獲取?)

GET_LOCK('rick');
...
RELEASE_LOCK('rick');

在 期間...,任何其他試圖做的執行緒GET_LOCK('rick')都會被阻塞。

這對您的應用程序有用嗎?

請注意注意事項:斷開連接(例如,網路故障)將釋放鎖定。多把鎖需要小心。等等。

…確保每個使用者請求將由我的伺服器的單個執行緒處理。

為什麼你覺得有必要這樣做?

引導所有處理

$$ clustered $$應用程序陷入瓶頸,在任何時候只有一個程序可以使用數據庫,這與現代關係數據庫的工作方式完全不同。 我建議像

$$ Serialisable $$ 交易更適合您的需求。

引用自:https://dba.stackexchange.com/questions/133793