欢迎您访问我的笔记本站旨在于记录一些平时工作中遇到的一些问题和解决方法,方便查阅,部分内容来源于网络,如有侵权请联系我删除
  • 微信微信
您现在的位置是:首页 > PHP后端

php 避免瞬时向数据库插入多条相同的数据-[原创]

日期:2018-08-03 15:32:08 作者:tanyi 来源:我的笔记 浏览:685 次
有时候在用户请求较多或网络环境复杂的情况下可能会出现一条相同的数据向数据库插入了多次,比如用户注册,这种结果不是我们想要的

今天上面反应这样一个情况,后台看到有一个用户的电话存在6条重复的数据在用户列表,我立马查询了下数据库看到确实这个号码在用户表存在6条数据,而且注册时间是一模一样。

我先检查了下表里面电话这个字段是否设置了唯一索引

然后想了下通过redis 的队列应该可以限制一下这种情况的发生,大概思路是这样。

数据库存在多条数据肯定是存在多次请求,那么我在注册的方法里面第一步是利用redis的队列来检查上一次请求是否已完成,

首先检查队列里面指定的对象是否存在数据,如果存在则直接打回,如果不存在执行后续注册的逻辑处理,在注册完成之后将队列里面的数据出列,在下次请求时,数据库的电话字段已设置了唯一索引,而且在注册的时候,也会利用代码去检查数据库是否已存在改电话,这样处理之后我想应该能避免瞬时插入多条重复数据的情况发生。这是redis的简单队列代码:

$redis=new Redis();
$phone='xxx';//正在注册的手机号

//程序判断该手机号是否已注册,如已注册则终止

......

//进队列
$strQueueName='request_'.$phone;

$strCount = $redis->lrange($strQueueName, 0, -1);

if($strCount){
   echo '请勿重复请求';die;
}
//入列一个数据标识
$redis->rpush($strQueueName, '1');

//处理注册的逻辑
//......
//注册成功
//出列
$redis->lpop($strQueueName);


原创文章转载时请注明原始出处,作者等相关信息

提交评论
评论列表