Mysql
Mysql 鎖定 - 如何為每個 userId 在數據庫中獲取鎖定
您好我有一個執行來自多個使用者的請求的 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 $$ 交易更適合您的需求。