【通过redis防止重复提交数据库】通过REDIS防止重复提交数据的例子

更新时间:2019-12-25    来源:redis    手机版     字体:

【www.bbyears.com--redis】

使用Redis可以很方便的防止表单或者按钮重复提交,给动作加锁,在一定时间内不能再次执行。

//防止重复提交
$lock_nopay = "nopay_".$sb_id.$sb_uid.$pay_money;
if(!$this->lock(10,$lock_nopay)){
    $this->error("当前取消打款操作尚未完成,请勿重复操作!");
}

这里调用lock方法,锁定10秒钟,10秒钟内如果再次提交就中断操作,认为是重复提交。


lock方法是这样写的:


/**
 * 锁定请求
 * @param $expire 锁定时间
 * @param $mark 自定义标记
 * @return bool
*/
protected function lock($expire=1,$mark=""){
    $url=strtolower(MODULE_NAME."/".ACTION_NAME);//操作地址
    $prefix="lock_";$sid=session_id();
    $key=$prefix.md5($sid.$url.$mark);//令牌键值
    if(D("Redis")->incr($key)==1){
        return D("Redis")->expire($key,$expire);
    }
    return false;
}
使用redis的incr自增方法,和expire缓存时间方法,判断一定时间内是否是同一个请求,如果是同一个请求返回false,这样来防止表单或按钮重复提交。

当方法执行完成,需要解除重复提交的锁定。


//解除锁定
$this->unlock($lock_nopay);

这样就是使用redis防止重复提交,或者按钮重复点击的完整方法

本文来源:http://www.bbyears.com/shujuku/83516.html