PHP有个很nice的框架:Larvel
这个框架很重,自带功能很多,处理业务能力也不错,但是用的时间长了会发现一个问题:插入数据库有时候会插入失败
如何造成这个问题呢? 一定是并发写入数据库的频率够高
有的人用责任链写代码很舒服,长久以往就会重度依赖责任链,什么是责任链呢? 大家可以自行百度
Larvel里面的责任链说白了就是一个事务,责任链每一步操作就可以回退,在事务里面会进行很多逻辑、业务等的处理,那么问题就来了,在责任链的一开始就进行事务 锁表操作,粒度很大,如果你此时要处理的逻辑很多的话,那么在并发大的情况下会造成数据无法成功插入。
如何解决:有2点
1. 做异常处理,涉及到队列、缓存,如果发现插入不成功,立刻往缓存里写入,由定时任务或者其他程序进行处理
2. 减少锁的粒度,一些逻辑不要在事务里处理