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);
        }
    });
}