php后台需要往mysql数据库表里插入记录,这张表的id是主键但不是自增长的,需要通过某种规则计算出来,比如先查看当天创建的记录有N个,那么这次的id就设为xxxN+1.如果访问量比较大情况下,可能多个请求先获取到的记录个数相同,那么就有可能生成相同的id,插入数据库的话就会报错,这种情况应该如何处理呢?
php后台需要往mysql数据库表里插入记录,这张表的id是主键但不是自增长的,需要通过某种规则计算出来,比如先查看当天创建的记录有N个,那么这次的id就设为xxxN+1.如果访问量比较大情况下,可能多个请求先获取到的记录个数相同,那么就有可能生成相同的id,插入数据库的话就会报错,这种情况应该如何处理呢?
第一种方式:改变主键的规则,换成自增或者其他随机算法生成这种更简单的形式。
第二种方式:单独维护主键的生成与使用,可以先提前按照原来的规则生成一定数量的主键入库,每次插入记录时先从其中获取一个主键,使用后将其销毁,但是需要注意的是适当的时机去补充主键,其实这就是建立了一个动态的数据池。
5 回答3.2k 阅读✓ 已解决
3 回答3.6k 阅读✓ 已解决
1 回答4k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答2.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
5 回答1.4k 阅读
1、如果业务需求一致性很强的话,加锁,或者线程阻塞保证数组的强一致性
2、使用非关系型数据库比如redis或者mongodb或者mecache
3、使用队列