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
