分布式锁使用

 1、在微服务项目中,上面的锁方法只能锁住一个单体的,分布式需要使用分布式锁

redis中的setnx

问题:

但是,如果进入判断后,还没执行到过期时间语句就断电,那也会死锁,所以应该使用

但是如果执行业务时间过长,锁被自动删了,等业务执行完了,删除的锁可能是别的业务获取到锁后执行的,所以,还要加个判断

但还是可能会出现问题,因为需要跟redis通信,你获取到redis中的值后,执行判断后,如果恰好别的线程获取到了锁,还是会错删别人的锁(所以查询锁和判断锁应该是原子操作)

可以通过lua脚本解决删除

2、使用redission做分布式锁(getLock(),还有读写锁getReadWrite、信号量getSemaphore、闭锁getCountDownLatch())

你可能感兴趣的:(redis,lua)