redis分布式锁的实现
$redis = new Redis('127.0.0.1',6379);
$redis ->auth = 123456;
$lockValue = 1000 * microtime();
$ttl = 600;
//set lock 111 nx px 6000
if ($redis->set('lock', $lockValue, array('nx', 'ex' => $ttl))) { //保证加锁跟设置过期时间唯一性
//枷锁成功执行业务逻辑
//执行完业务逻辑后,删除锁,这个判断防止业务逻辑没执行完,锁就过期了,而删除了别人的锁
if ($redis->get('lock') == $lockValue) {
$redis->del('lock');
}
} else {
//加锁失败,不能执行业务,可以递归算法调用函数本身重新加锁
}
浙公网安备 33010602011771号