Redis - 分布式锁

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zanpengfei/article/details/85687428

 1、setnx 和 expire 组合在一起的原子指令来解决分布式锁,但这种方式是有缺陷的,不太安全的,例如Sentinel集群,当客户端向主节点申请分布式锁成功后,主节点还没来及向从节点同步时,主节点挂掉了,主从切换,某个从节点摇身一变成为主节点,第二个用户再次申请锁,是可以成功的,这样俩个用户成功申请到了2把锁,不安全因素产生了,解决该方案是通过Redlock算法。

2、如果要使用redlock,需要提供多个Redis实例,这些实例相互独立没有主从关系,同很多分布式算法相同,redlock也使用了大多数机制。

        加锁时,它会向过半节点发送 set(key, value, nx=True, ex=xxx) 指令,只要过半节点 set 成功,那就认为加锁成功。释放锁时,需要向所有节点发送 del 指令。不过 Redlock 算法还需要考虑出错重试、时钟漂移等很多细节问题,同时因为 Redlock 需要向多个节点进行读写,意味着相比单实例 Redis 性能会下降一些。

但是采用redlock,有一些弊端,例如你必须有多个实例、性能上会下降一些、增加运维的工作量等等

猜你喜欢

转载自blog.csdn.net/zanpengfei/article/details/85687428