本文地址: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' )
}