本文参考了http://huoding.com/2015/09/14/463。
我们知道,现在的Redis实现加锁的方法比较简单,直接调用Redis的set指令:
$redis->set($key, $random, array('nx', 'ex' => $expire));
就可以实现。其中$random是个随机值,nx表示如果Redis中不存在$key时,就设置$key,ex表示设置超时,$expire表示超时的值。
但是,解锁的方法稍微复杂些。
今天跟同事讨论问题时,发现文章开头的链接中给出的方法仍然有问题,有下面这种情况:
假设现在有两个进程,分别是A和B。A在执行到:
if ($redis->get($key) == $random) {
$redis->del($key);
}