你的位置:首页 > 软件开发 > 数据库 > jedisLock—redis分布式锁实现

jedisLock—redis分布式锁实现

发布时间:2016-10-10 22:01:18
一、使用分布式锁要满足的几个条件:系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现)共享资源(各个系统访问同一个资源,资源的载体可能是传统关系型数据库或者NoSQL)同步访问(即有很多个进程同事访问同一个共享资源 ...

jedisLock—redis分布式锁实现

一、使用分布式锁要满足的几个条件:

  1. 系统是一个分布式系统(关键是分布式,单机的可以使用ReentrantLock或者synchronized代码块来实现)
  2. 共享资源(各个系统访问同一个资源,资源的载体可能是传统关系型数据库或者NoSQL
  3. 同步访问(即有很多个进程同事访问同一个共享资源。没有同步访问,谁管你资源竞争不竞争)

二、应用的场景例子

  管理后台的部署架构(多台tomcat服务器+redis【多台tomcat服务器访问一台redis】+mysql【多台tomcat服务器访问一台服务器上的mysql】)就满足使用分布式锁的条件。多台服务器要访问redis全局缓存的资源,如果不使用分布式锁就会出现问题。 看如下伪代码:

long N=0L;//N从redis获取值if(N<5){N++;//N写回redis}

 例子:

redis> EXISTS job        # job 不存在(integer) 0redis> SETNX job "programmer"  # job 设置成功(integer) 1redis> SETNX job "code-farmer"  # 尝试覆盖 job ,失败(integer) 0redis> GET job          # 没有被覆盖"programmer"

四、解决死锁

  上面的锁定逻辑有一个问题:如果一个持有锁的客户端失败或崩溃了不能释放锁,该怎么解决

我们可以通过锁的键对应的时间戳来判断这种情况是否发生了,如果当前的时间已经大于lock.foo的值,说明该锁已失效,可以被重新使用。 

原标题:jedisLock—redis分布式锁实现

关键词:Redis

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录