大访问量,或者受到恶意攻击的情况,数据库没有设计好,很容易产生重复数据。有三个请求,同时到达php,php同时到数据库查询,有没有数据,发现没有,同时插入3条数据。这么巧都是同时?事实确实会同时。解决办法,个人能实现的有3种。
1,通过唯一索引,联合主键限制等。例如,用户表手机号,邮箱一般都是唯一的。订单表的订单号也是唯一。
2,通过锁表。例如,现在对表进行插入操作前,php先lock表,结束后在unlock表。锁表会造成等待时间加长,特别在访问大的时候。不推荐锁表。
3,通过队列。如果三个请求同时到达php,能不能让他们依次执行呢。队列服务端监听端口,三个请求往端口发送请求,就要遵守队列的规矩了。
个人觉得,第一种方法是最好的,如果第一次方法不能满足需求,推荐第三种方法。