redisロックはトランザクションのコミット後に解放されます
570 ワード
私たちが普段分散ロックを使用している方法に問題があることがわかりました.例えば、try{}finnally{ロックを解放}です.方法にトランザクションがあれば、finnallyに入るときは、データが永続化されているわけではありません.ロックが早期に解放される可能性があります.正しい方法は、物事が完了してからロックを解放することです.
/**
*
*/
private void unlockAfterTransaction(LockResult lockResult) {
//
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
@Override
public void afterCompletion(int status) {
super.afterCompletion(status);
distLockSservice.unlock(lockResult);
}
});
}