分析laravel排他锁lockForUpdate()使用问题
发布时间 - 2021-01-08 00:00:00 点击率:次下面由Laravel教程栏目给大家介绍laravel排他锁lockForUpdate()使用问题,希望对需要的朋友有所帮助!
对于mysql的排他锁,做了一个测试,看下是否存在排他效果。
测试1:命令行测试排他锁首先在命令行里测试,开了两个命令行首先在命令行1添加排他锁:然后再命令行2里测试访问:可以看到,确实产生阻塞了,在命令行1里commit结束后,命令行2里也执行结果了。所以,在命令行里测试排他锁是没有问题的。
测试2:laravel控制器方法里测试排他锁
下面测试下laravel里的排他锁:
两个路由:Route::get('/locktest1','LockController@LockTest1');Route::get('/locktest2','LockController@LockTest2');
控制器中的LockTest1和LockTest2这两个方法内容都一样:DB::beginTransaction(); // 开启事务 $goods = Goods::lockForUpdate()->first(); print_r($goods);
先访问路由
/locktest1,正常打印出数据,个人猜想此时事务没有关闭,如果再有访问数据表的请求,应该是阻塞的。
所以在此访问/locktest2,结果还是正常打印出数据,为什么没有产生阻塞效果呢?
测试3:laravel控制器方法与命令行混合测试排他锁
1、先在命令行里开启事务添加排他锁,同测试1里的命令行1的操作;
然后访问路由/locktest1,页面一直运行中,说明查询数据存在阻塞;
最后命令行里commit提交。
2、先访问路由/locktest1,正常打印出数据;
然后在命令行里开启事务添加排他锁,同测试1里的命令行1的操作,发现正常查询出数据,没有阻塞;说明laravel的控制器方法里的排他锁操作确实没有成功。
总结:为什么laravel的lockForUpdate()没有效果呢,还是说laravel控制器方法执行完毕后,会自动结束事务才导致没有阻塞效果的?
于是,再次做下面测试:
将路由1的控制器方法里加了一个sleep()方法:
DB::beginTransaction(); // 开启事务 $goods = Goods::lockForUpdate()->first(); print_r($goods);sleep(10);echo 'ddd';
然后,访问路由1/locktest1,页面在等待刷新;再访问路由2/locktest2,页面也在等待刷新,说明应该是产生数据阻塞了,因为路由2中没有sleep(),正常情况下是立即执行的。
10秒过后,/locktest1页面打印出数据,同时/locktest2页面也打印出数据。
由此判断,上面测试3没有产生阻塞效果,应该就是控制器的方法结束后,自动结束事务导致的。
以上是个人分析,如有大神路过,还望留言告知一个正确答案!
更多编程相关知识,请访问:编程教学!!
# laravel
# mysql
# 命令行
# 里加
# 应该是
# 结束后
# 在此
# 如有
# 也在
# 开了
# 这两个
# 大神
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】
html5如何实现懒加载图片_ intersectionobserver api用法【教程】
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
如何用AI帮你把自己的生活经历写成一个有趣的故事?
高端建站三要素:定制模板、企业官网与响应式设计优化
香港服务器租用费用高吗?如何避免常见误区?
Laravel安装步骤详细教程_Laravel环境搭建指南
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
Laravel怎么连接多个数据库_Laravel多数据库连接配置
深圳网站制作平台,深圳市做网站好的公司有哪些?
Laravel如何实现多对多模型关联?(Eloquent教程)
使用spring连接及操作mongodb3.0实例
Laravel怎么清理缓存_Laravel optimize clear命令详解
微信小程序 HTTPS报错整理常见问题及解决方案
Laravel如何实现全文搜索功能?(Scout和Algolia示例)
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
七夕网站制作视频,七夕大促活动怎么报名?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
iOS验证手机号的正则表达式
Laravel如何实现用户密码重置功能?(完整流程代码)
Laravel DB事务怎么使用_Laravel数据库事务回滚操作
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
如何用AWS免费套餐快速搭建高效网站?
HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】
如何在腾讯云服务器上快速搭建个人网站?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
如何在阿里云购买域名并搭建网站?
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
再谈Python中的字符串与字符编码(推荐)
百度输入法ai面板怎么关 百度输入法ai面板隐藏技巧
laravel服务容器和依赖注入怎么理解_laravel服务容器与依赖注入解析
Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道
Android滚轮选择时间控件使用详解
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
Laravel如何记录自定义日志?(Log频道配置)
Laravel Fortify是什么,和Jetstream有什么关系
laravel怎么在请求结束后执行任务(Terminable Middleware)_laravel Terminable Middleware请求结束任务执行方法
Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何在橙子建站中快速调整背景颜色?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
jQuery 常见小例汇总
PHP 500报错的快速解决方法
晋江文学城电脑版官网 晋江文学城网页版直接进入
Laravel如何生成URL和重定向?(路由助手函数)


)->first();
print_r($goods);