1、在微服务项目中,上面的锁方法只能锁住一个单体的,分布式需要使用分布式锁
redis中的setnx
问题:
但是,如果进入判断后,还没执行到过期时间语句就断电,那也会死锁,所以应该使用
但是如果执行业务时间过长,锁被自动删了,等业务执行完了,删除的锁可能是别的业务获取到锁后执行的,所以,还要加个判断
但还是可能会出现问题,因为需要跟redis通信,你获取到redis中的值后,执行判断后,如果恰好别的线程获取到了锁,还是会错删别人的锁(所以查询锁和判断锁应该是原子操作)
可以通过lua脚本解决删除
2、使用redission做分布式锁(getLock(),还有读写锁getReadWrite、信号量getSemaphore、闭锁getCountDownLatch())