为了账号安全,请及时绑定邮箱和手机立即绑定

关于并发的问题

关于并发的问题

PHP
当年话下 2019-03-18 15:24:53
php后台需要往mysql数据库表里插入记录,这张表的id是主键但不是自增长的,需要通过某种规则计算出来,比如先查看当天创建的记录有N个,那么这次的id就设为xxxN+1.如果访问量比较大情况下,可能多个请求先获取到的记录个数相同,那么就有可能生成相同的id,插入数据库的话就会报错,这种情况应该如何处理呢?
查看完整描述

5 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

1、如果业务需求一致性很强的话,加锁,或者线程阻塞保证数组的强一致性
2、使用非关系型数据库比如redis或者mongodb或者mecache
3、使用队列

查看完整回答
反对 回复 2019-03-18
?
慕少森

TA贡献2019条经验 获得超9个赞

Redis的incr可以解决

查看完整回答
反对 回复 2019-03-18
?
萧十郎

TA贡献1815条经验 获得超13个赞

锁数据库并不是一个好办法,可能在并发时导致提交失败。
建议还是修改数据库架构,把当前主键改为unique索引。

查看完整回答
反对 回复 2019-03-18
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

建议id做保留字段,如你所说的规则,将日期做一个字段,当天的记录号作一个字段,建立联合唯一索引

redis来计数当天的记录数,如果并发量较大,可以考虑队列消耗

查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 396 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信