关闭

分布式锁实现

88人阅读 评论(0) 收藏 举报

利用Redis实现多服务器多进程环境下的分布式全局锁


首先调用 INCR 并检测返回值,如果等于1就表示获得了锁

然后EXPIRE设置此Key的过期时间,

然后开始进行操作,

当操作完成后DEL删除这个KEY

伪代码如下

[plain] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. if( INCR( 'EXCLUSION_COUNT' ) == 1 )  
  2. {  
  3.      EXPIRE(60) // set ttl for 1 minute  
  4.       
  5.      // DO some work  
  6.   
  7.      DEL( 'EXCLUSION_COUNT' )}  
  8. }  

这里的 EXPIRE(60) 表示我们假定接下来的操作一定会在1分钟内完成。需要根据实际情况调整这个值.
如果当前获得了锁的进程或者机器在执行过程中崩溃了,其它进程或者机器也能在1分钟后重新获得锁执行。


如果处理的过程是一个不确定执行时间的过程,可以每隔一段时间renew一下这个KEY, 比如

[plain] view plain copy
 print?在CODE上查看代码片派生到我的代码片
  1. if( INCR( 'EXCLUSION_COUNT' ) == 1 )  
  2. {  
  3.        
  4.   
  5.      for(...){  
  6.            EXPIRE(60) // set ttl for 1 minute  
  7.   
  8.             // DO some work  
  9.      }  
  10.   
  11.      DEL( 'EXCLUSION_COUNT' )  
  12. }  



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:96700次
    • 积分:1512
    • 等级:
    • 排名:千里之外
    • 原创:21篇
    • 转载:231篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论