<?php
$over_time=time()+3600;
$nowtime=time();
$query=$db->query("select down_time from members where uid='1'");
$down_time=$query->fect_assoc(); if($down_time['down_time']<$nowtime){
$db->query("update members set down_time=$over_time where uid='1'");
die('你成功得奖励!');
}else{
$latime=$down_time['down_time']-$nowtime;
die("你已经领过奖励了,请等$latime分钟后再试!");
}?>
这个判断有个问题,就是点得快一点后呢,可能就会给他两次以上的奖励。。主要看他的网络有多卡,我最多看到有给
8次奖励。有什么办法可以解决这个问题呢?
所以当几个select 后,他还没有update完。。所以才造就了这个结果?那用锁的话,如果我并发比较高,对性能比影响比较大。有没有好的办法?我一直认为SQL语句是按照顺序执行的郁闷了。。
还有一种是写PHP逻辑,在MENCACHED等内存缓存中增加一个标志,必须等你执行完后才能执行下次操作。
还有一种是在前端JS判断,也是增加一个标记,就是全局变量记录上次点击该按钮时间,和本次时间比较,小于你要求的时间就不提交到后端。
update members set down_time=$over_time where uid='1'
and down_time<date_sub(now(),interval 1 hour )
这样重复的提交就不会发生实际的数据更改