一,Redis分布式锁的实现
想要实现一个分布式锁,必须要求 Redis 有有互斥的能力, 我们可以使用SETNX命令,SETNX是是set if not exists 的缩写,也就是只有不存在的时候才设置, 设置成功时返回 1 , 设置失败时返回 0 。可以利用它来实现锁的效果。
两个客户端可以执行这个命令,达到互斥。就可以实现一个分布式锁。
客户端1申请加锁,加锁成功。
客户端 2 申请加锁,因为后到达,加锁失败:
此时加锁成功的客户端,就可以去操作共享资源了。例如操作数据库中的一行数据,或者调用一个API请求。
操作完成后,还要及时的释放锁,给后来者让出操作公共资源的机会,那如何释放锁呢?
也很简单,用DEL这个命令就可以删除这个key即可;
这个逻辑很简单,就是加锁->操作共享资源->释放锁的一个过程。