实现方式: ⾸先利⽤ setnx 来保证:如果key不存在才能获取到锁,如果key存在,则获取不到锁 然后还要利⽤lua脚本来保证多个redis操作的原⼦性 同时还要考虑到 锁过期 ,所以需要额外的⼀个看⻔狗定时任务来监听锁是否需要续约 同时还要考虑到redis节点挂掉后的情况,所以需要采⽤ 红锁 的⽅式来同时向 N/2+1 个节点申请锁,都申请到了才证明获取锁成功,这样就算其中某个redis节点挂掉了,锁也不能被其他客户端获取到