Php (缓存::锁())->;get()--在什么条件下返回false?
我正在研究在laravel中使用Php (缓存::锁())->;get()--在什么条件下返回false?,php,laravel,Php,Laravel,我正在研究在laravel中使用Cache::lock机制,但有些事情我并不清楚 这是他们使用的示例: $lock = Cache::lock('foo', 10); if ($lock->get()) { // Lock acquired for 10 seconds... $lock->release(); } 现在,我的理解是,在正常情况下,如果调用$lock->get()时锁仍在原位,它将等待前一个锁释放,然后继续。对吗?(对我来说,这似乎就是锁的全部意
Cache::lock
机制,但有些事情我并不清楚
这是他们使用的示例:
$lock = Cache::lock('foo', 10);
if ($lock->get()) {
// Lock acquired for 10 seconds...
$lock->release();
}
现在,我的理解是,在正常情况下,如果调用
$lock->get()
时锁仍在原位,它将等待前一个锁释放,然后继续。对吗?(对我来说,这似乎就是锁的全部意义,所以我当然希望这是正确的)
如果这是正确的,那么什么会使
$lock->get()
返回false?如果它期望等待时间超过10秒或类似的时间,它会返回false吗?在laravel文档和源文件中很难找到与此相关的内容。我能收集到的是,对Cache::lock
的调用并没有获取它,它似乎只定义了可以锁定的内容
对get()
和block()
的调用似乎完成了实际的获取
我的假设如下:
将在Cache::lock(foo,n)
上创建一个新锁,该锁最多可保持foo
秒n
将尝试获取它,如果它已被其他人持有,则返回false$lock->get()
将尝试获取它并阻止最长$lock->block(n)
秒,如果在此期间未能获取,它将抛出n
LockTimeoutException
供参考:
$lock->get()
似乎返回true,第二个返回false,只要第一个请求中没有调用$lock-release()
。因此$lock->get()
根本不等待,但是$lock->block()
会等待,(如果我的假设是正确的,但这是最有意义的)阅读Lock.php中关于block和get的代码,你似乎是对的。block通过一个睡眠循环,它显然每四分之一秒检查一次锁,直到它得到锁,如果它不能在指定的秒数内得到锁,就会出错。谢谢你的回答。我太笨了。如果我只是阅读Laravel文档的其余部分,它会给出一个错误n使用->block()
等待的示例。