报错内容:
java.lang.IllegalStateException: Lock was released in the store due to expiration. The integrity of data protected by this lock may have been compromised.
at org.springframework.integration.redis.util.RedisLockRegistry$RedisLock.unlock(RedisLockRegistry.java:310)
处理方式:
1.
public RedisLockRegistry(RedisConnectionFactory connectionFactory, String registryKey) {
//private static final long DEFAULT_EXPIRE_AFTER = 60000L; 1分钟
this(connectionFactory, registryKey, DEFAULT_EXPIRE_AFTER);
}
看下用该类创建的redis锁的定义,是不是用了默认的超时时间,一分钟可能锁就释放了,导致上述问题.
2.
finally {
try {
lock.unlock();
} catch (Exception e) {
//noinspection ThrowFromFinallyBlock
throw new DataVerifyException(Error.builder().responseCode(ResponseCode.DATA_VERIFY_EXCEPTION).message("该操作频繁,请稍后再试").build());
}
}
释放锁的操作用try包一下(这个是可选项,具体原因看下面扩展)