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' ) }
本文地址:http://blog.csdn.net/wangjia184/article/details/20642331
本文地址:http://www.45fan.com/a/question/70972.html