Redis实现分布式锁的基本步骤如下:
1、加锁:使用setnx加锁。
//如果lock存在则返回0,否则返回1
setnx lock 1
key是锁的唯一标识,value可以是任意值。当一个线程执行setnx时返回1,说明key不存在,此线程即成功获得了锁;否则如果返回0,说明key已存在,线程抢锁失败,需要等待。
2、设置超时时间:使用expire设置过期时间。
//设置lock键30秒后过期
expire lock 30
设置超时时间是因为如果上锁的线程在执行过程中出现错误而退出,会导致锁无法被释放,则其它线程永远无法获取到此锁,造成线程的死锁,所以设置超时时间以保证即使锁没有被显式释放,也会在一段时间后自动释放。
3、释放锁:使用del删除键。
//删除ock
del lock
当线程执行完任务需要释放锁,以便其他线程可以进入。