分布式锁

  分布式的CAP理论告诉我们:任何一个分布式系统都无法同时满足一致性,分区容错性,可用性,最多只能同时满足两项。 

分布式系统与单机系统的区别:
  1.分布式系统不是多线程而是多进程。

  2.多ianchengyouyu可以共享堆内存,因此可以简单的菜与内存作为标记存储位置;而进程之间可能都不在一台物理机上,因此需要将标记存储在一个所有进程都可见的地方。

 

线程锁:为了实现多个线程在同一时刻同一代码块只有一个线程可以执行,那么需要在某个地方做标记(堆内存),这个标记必须每个线程都能看见,当标记不存在时设置标记,后续线程发现已经有标记了则等待用有标记的线程,结束同步代码块取消标记后再尝试设置标记,这个标记可以理解为锁。

 

分布式锁实现方法


基于Redis做分布式锁    所用Redis方法setnx()、expire()

方法介绍:  setnx(key,value)   方法是原子的  如果设置key不存在,则设置当前key成功,返回1;

        如果当前key已经存在,则设置当前key失败,返回0。

       expire()  设置过期时间,因为setnx命令不能设置key的超时时间,只能通过expire()来对key设置。

 

设置步骤:  1.setnx(lockkey,1)如果返回0,说明上锁失败,有线程在调用方法

       2.expire()对lockkey设置超时时间,避免死锁。

          3.执行完业务代码后,可以通过delete命令删除key

 

漏洞:上述方案在setnx执行成功后,expire执行成功前发生宕机的现象,依然会出现死锁方案。

posted @ 2018-12-13 17:07  sjqsjq  阅读(140)  评论(0编辑  收藏  举报