这两天在看laravel的redis
发现Cache::lock
在后端开发中,关于锁的问题,也是经常能遇到的。为了防止程序并行所导致的数据破坏,或者系统故障,在开发中合理的运用锁,可以带来更好的效果。
你可以通过 Cache::lock 方法来创建和管理锁:
```
if (Cache::lock('foo', 10)->get()) {
// 锁住这个key 10秒的时间
// 然后我们可以接着自己实际项目中的相关操作
Cache::lock('foo')->release();//一定要在结尾处释放锁,不然会导致别的并行或后续请求一直无法获取锁而停滞
}
```
`https://blog.csdn.net/weixin_40534405/article/details/122243858`
```
#try{
# $lock_key = "invoice:store:uid";
# $isLocked = Cache::lock($lock_key)->get(); //创建锁
# if (!$isLocked) {
# //error_log("locking\r\n", 3,'/tmp/1.log' );
# throw new \Exception('出错');
# }
# $good = new Good();
# $count = Good::where('product_id',1)->count();
# $remain_count = 3;
# if($remain_count - $count insert(['product_id' => 1,'addtime'=>date('Y-m-d H:i:s')]);
#} catch (\Exception $e) {
# error_log($e->getMessage()."\r\n", 3,'/tmp/1.log' );
#} finally {
# if ($isLocked) {
# error_log("unlock\r\n", 3,'/tmp/1.log' );
# Cache::lock($lock_key)->release();
# }
#}
```