redis分布式锁
1.分布式锁的含义
分布式锁其实就是控制分布式系统不同进程共同访问共享资源的一种锁的实现。如果不同的系统或同一个系统的不同主机之间共享了某个临界资源,往往需要互斥来防止彼此干扰,以保证一致性。
在分布式锁方面, Redis有广泛应用, 日常开发中分布式锁的一些常见常见有秒杀下单、抢红包等等。
2.分布式锁方案
一些比较常见的分布式锁方案
SETNX + EXPIRE
SETNX + value值是(系统时间+过期时间)
SET EX PX NX + 校验唯一随机值,再释放锁
多机实现的分布式锁Redlock
ZooKeeper实现分布式锁
使用数据库实现分布式锁
3.redis实现分布式锁
Redis 实现分布式锁的方式名叫Redlock
a)、客户端先获取「当前时间戳T1」
b)、客户端依次向这 5 个 Redis 实例发起加锁请求(用前面讲到的 SET 命令),且每个请求会设置超时时间(毫秒级,要远小于锁的有效时间),如果某一个实例加锁失败(包括网络超时、锁被其它人持有等各种异常情况),就立即向下一个 Redis 实例申请加锁
c)、如果客户端从 >=3 个(大多数)以上 Redis 实例加锁成功,则再次获取「当前时间戳T2」,如果 T2 - T1 < 锁的过期时间,此时,认为客户端加锁成功,否则认为加锁失败
d)、加锁成功,去操作共享资源(例如修改 MySQL 某一行,或发起一个 API 请求)
e)、加锁失败,向「全部节点」发起释放锁请
参考:https://blog.csdn.net/q66562636/article/details/124739036