下面由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排他锁lockForUpdate()使用问题的详细内容。更多信息请关注PHP中文网其他相关文章!

Laravel是如何在后端逻辑中发挥作用的?它通过路由系统、EloquentORM、认证与授权、事件与监听器以及性能优化来简化和增强后端开发。1.路由系统允许定义URL结构和请求处理逻辑。2.EloquentORM简化数据库交互。3.认证与授权系统便于用户管理。4.事件与监听器实现松耦合代码结构。5.性能优化通过缓存和队列提高应用效率。

Laravel受欢迎的原因包括其简化开发过程、提供愉快的开发环境和丰富的功能。1)它吸收了RubyonRails的设计理念,结合PHP的灵活性。2)提供了如EloquentORM、Blade模板引擎等工具,提高开发效率。3)其MVC架构和依赖注入机制使代码更加模块化和可测试。4)提供了强大的调试工具和性能优化方法,如缓存系统和最佳实践。

Django和Laravel都是全栈框架,Django适合Python开发者和复杂业务逻辑,Laravel适合PHP开发者和优雅语法。1.Django基于Python,遵循“电池齐全”哲学,适合快速开发和高并发。2.Laravel基于PHP,强调开发者体验,适合小型到中型项目。

PHP和Laravel不是直接可比的,因为Laravel是基于PHP的框架。1.PHP适合小型项目或快速原型开发,因其简单直接。2.Laravel适合大型项目或高效开发,因其提供丰富功能和工具,但学习曲线较陡,性能可能不如纯PHP。

laravelisabackendframeworkbuiltonphp,设计ForweBapplicationDevelopment.itfocusessonserver-sideLogic,databasemagemention和Applicationstructure和CanBeintegratedWithFrontendTechnologiesLikeLikeVue.jsorreActeReacterVue.jsorreActforforfull-stackDevefloct。

本文讨论了Laravel中的创建和使用自定义刀片指令以增强模板。它涵盖了定义指令,在模板中使用它们,并在大型项目中管理它们,强调了改进的代码可重复性和R等好处

本文讨论了使用组件在Laravel中创建和自定义可重复使用的UI元素,从而为组织提供最佳实践并建议增强包装。

文章讨论了使用Laravel的路由来创建SEO友好的URL,涵盖最佳实践,规范的URL和SEO优化工具。WordCount:159


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版

WebStorm Mac版
好用的JavaScript开发工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

Atom编辑器mac版下载
最流行的的开源编辑器