redis 实现订单倒计时自动取消

我们要实现的逻辑是订单下单之后如果10分钟内没有支付,就自动取消,下面是10分钟之后的回调,sub.php中的内容

<?php
ini_set(default_socket_timeout, -1);
$redis = new Redis();
$redis->connect(127.0.0.1, 6379);
$redis->psubscribe(array(__keyevent@0__:expired), keyCallback);
function keyCallback($redis, $pattern, $chan, $msg)
{
    $id = $msg;
    //echo 任务表id:.$id.PHP_EOL;
    
        $curl = curl_init();
		//设置抓取的url
        $url="/newordermsg?id=".$id; 

        curl_setopt($curl, CURLOPT_URL, $url);         
        curl_setopt($curl, CURLOPT_HEADER, 1);        //设置头文件的信息作为数据流输出
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//设置获取的信息以文件流的形式返回,而不是直接输出
        $data = curl_exec($curl);                     //执行命令
        curl_close($curl);                            //关闭URL请求
        return  ($data); 
   
    
}

还有刚下完订单需要把订单号存入redis中:

<?php
$id=123456;
$redis = new Redis();
$redis->connect(127.0.0.1, 6379);
$seconds = 480;//过期时间 
$redis->config("SET","notify-keyspace-events", "Ex");
$redis->setEx($id,$seconds,$id);
//$redis->del($id);

记得在后台运行sub.php

经验分享 程序员 微信小程序 职场和发展