laraval再lockforupdate的情况下,如何防止读到脏数据
场景是这样的,用户下单时候,我对用户的资产加了一个lockforupdate,防止用户在其他地方同时下单,资产用到其他地方,当时我发现lockforupdate,只能锁定不更改,其他地方读还是可以的那其他地方显示的数据可能就错误了,这中情况该如何避免?
你是不是没用把lockForUpdate的sql放进事务里面,如果没放事务里面就等于没锁到
例:
如果没记错的话 for update 是排他锁,锁住后别人是不能读取的。
所以不存在你说的情况
用户资产相关的数据可以加一个版本字段,更新时读取的版本是条件
资产操作时获取个原子锁
缓存系统《Laravel 9 中文文档》
事务的隔离级别
执行sql需放置事务中【事务结束,锁才会释放】,没有放在事务中,那条sql执行完【锁就释放掉了】