Redis分布式锁问题,订单查询时,线程20在06:54:06.878 时查询订单 ac6743fbbd884c29a0c64c9b632d2cc4 支付状态,获取订单 ac6743fbbd884c29a0c64c9b632d2cc4 锁,8秒后自动释放;
线程4在06:54:19.653 时查询订单ac6743fbbd884c29a0c64c9b632d2cc4 支付状态,由于前一个线程的锁已经自动释放,所以线程4获取锁成功;
之后线程20在 06:54:31.045 执行代码完毕,准备释放锁,此时报异常:java.lang.IllegalMonitorStateException: attempt to unlock lock, not locked by current thread by node id: 19a3abdc-490a-423e-bd26-d38b1e4da82b thread-id: 105475
由于当前锁不是被当前线程20锁定,而是被线程4锁定,所以报异常;
解决方案
1、延长锁自动释放时间
2、去除锁自动释放,而是改为到finally代码块去释放锁