Redis实现分布式全局锁

本文地址:http://blog.csdn.net/wangjia184/article/details/20642331


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


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

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

然后开始进行操作,

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

伪代码如下

if( INCR( 'EXCLUSION_COUNT' ) == 1 )
{
     EXPIRE(60) // set ttl for 1 minute
    
     // DO some work

     DEL( 'EXCLUSION_COUNT' )}
}

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


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

if( INCR( 'EXCLUSION_COUNT' ) == 1 )
{
     

     for(...){
           EXPIRE(60) // set ttl for 1 minute

            // DO some work
     }

     DEL( 'EXCLUSION_COUNT' )
}



猜你喜欢

转载自blog.csdn.net/wangjia184/article/details/20642331