关于29Redis代码的使用和解读

最近很多小伙伴问Redis怎么配置,有什么作用

首先我们看第一个代码 redis_ru.php

<?php
include('../confing/common.php');
$redis=new Redis();
$redis->connect("127.0.0.1","6379");

while (true) {
 echo "入队成功!连通redis: " . $redis->ping() . "\r\n";
 $i=0;
 $a=$DB->query("select * from qingka_wangke_order where dockstatus=1 and status!='已完成'order by oid asc");
 foreach($a as $b){ 
 $redis->lPush("oids",$b['oid']);
 $i++;
 }
 echo "本次入队订单共计:".$i."条!\r\n";
 // 暂停一段时间,例如10秒
 sleep(10);
}
?>

这段代码的作用是将数据库中满足特定条件的订单号(oid)存入Redis的列表(oids)中,并定时执行这个操作。

具体步骤如下:

  1. 导入common.php文件,该文件可能包含了一些常用函数和数据库连接信息等。
  2. 创建Redis实例并连接到Redis服务器。
  3. 进入无限循环。
  4. 输出与Redis服务器的连接状态。
  5. 初始化变量$i,用于计算本次入队订单的数量。
  6. 使用数据库查询获取满足条件的订单数据。
  7. 遍历查询结果,将每个订单的订单号推入Redis的列表中。
  8. 更新变量$i,表示入队订单的数量。
  9. 输出本次入队订单的数量。
  10. 通过睡眠10秒的方式暂停程序的执行,等待下一次循环开始。

然后是redis_chu.php

<?php
include('../confing/common.php');
$redis=new Redis();
$redis->connect("127.0.0.1","6379");


while(true){
    $oid=$redis->lpop('oids');
    $a=$DB->get_row("select * from qingka_wangke_order where oid='$oid'");
    if($oid!=''){
        $result=processCx($oid);
        // var_dump($result);
        for($i=0;$i<count($result);$i++){
            if($result[$i]['msg']=="系统繁忙,请稍后再试。"){
                $today_day=date("Y-m-d H:i:s");
                echo 
                    "更新订单ID:".$oid."时出现系统繁忙,自动暂停10分钟....\r\n本次出队时间:".$today_day."\r\n------------------------------------------------------\r\n";
                sleep(600);
            }
            if($result[$i]['code']==1 && $result[$i]['kcname']==$a['kcname']){
                $process_new=$result[$i]['process'];
                $status_new=$result[$i]['status_text'];
                $remarks_new=$result[$i]['remarks'];
            }
            $DB->query("update qingka_wangke_order set `name`='{$result[$i]['name']}',`yid`='{$result[$i]['yid']}',`status`='{$result[$i]['status_text']}',`courseStartTime`='{$result[$i]['kcks']}',`courseEndTime`='{$result[$i]['kcjs']}',`examStartTime`='{$result[$i]['ksks']}',`examEndTime`='{$result[$i]['ksjs']}',`process`='{$result[$i]['process']}',`remarks`='{$result[$i]['remarks']}' where `user`='{$result[$i]['user']}'  and `kcname`='{$result[$i]['kcname']}' and `oid`='{$oid}'");
        }
        $today_day=date("Y-m-d H:i:s");
        if($process_new==''){
            echo "订单id:".$oid."异常!跳过。\r\n------------------------------------------------------\r\n";
        }else{
            if($process_new==$a['process']){echo "订单id:".$oid."状态无需更新,跳过。\r\n------------------------------------------------------\r\n";
            }else{
                echo "订单ID:".$oid."\r\n状态更新:".$a['status']."=>".$status_new."\r\n进度更新:".$a['process']."=>".$process_new."\r\n备注更新:".$a['remarks']."=>".$remarks_new."\r\n本次出队时间:".$today_day."\r\n------------------------------------------------------\r\n";
            }
            
        }
    }
    sleep(5);
}
?>

这段代码的作用是从Redis的列表(oids)中取出订单号,然后根据订单号更新数据库中对应的订单状态和进度信息。

具体步骤如下:

  1. 导入common.php文件。
  2. 创建Redis实例并连接到Redis服务器。
  3. 进入无限循环。
  4. 使用lpop()方法从Redis的列表中取出一个订单号。
  5. 使用数据库查询获取该订单号对应的订单数据。
  6. 如果订单号不为空,执行以下步骤。
  7. 调用processCx()函数处理订单数据,返回结果赋值给变量$result。
  8. 循环遍历$result数组。
  9. 如果返回结果中包含”系统繁忙,请稍后再试。”的错误信息,暂停程序执行10分钟。
  10. 如果返回结果中包含成功的code和课程名称与查询结果中的一致,更新订单的进度、状态和备注信息。
  11. 使用数据库更新语句将更新后的订单信息写入数据库。
  12. 获取当前时间,并根据订单信息的变化输出相应的日志信息。
  13. 如果订单id对应的进度为空,则输出异常信息。
  14. 如果订单id对应的进度和查询结果的进度一致,则输出无需更新的信息。
  15. 如果订单id对应的进度和查询结果的进度不一致,则输出状态、进度和备注的更新信息。
  16. 通过睡眠5秒的方式暂停程序的执行,等待下一次循环开始。

另外如果你是对接的,还需要一个自动交单脚本,如下

<?php
include('../confing/common.php');
$redis=new Redis();
$redis->connect("127.0.0.1","6379");

while (true) {
    // 执行对接 
    $a=$DB->query("select * from qingka_wangke_order where dockstatus='0' and status!='已取消' ");
    while($b=$DB->fetch($a)){
        if($b['user']=="1"){
            $DB->query("update qingka_wangke_order set `status`='请检查账号',`dockstatus`=2 where oid='{$b['oid']}' "); //对接成功 
            $redis->lPush('order_updates', "{$b['oid']}:请检查账号");
        }elseif($b['school']==""){
            $DB->query("update qingka_wangke_order set `status`='请检查学校名字',`dockstatus`=2 where oid='{$b['oid']}' "); //对接成功 
            $redis->lPush('order_updates', "{$b['oid']}:请检查学校名字");
        }elseif($b['user']==""){
            $DB->query("update qingka_wangke_order set `status`='请检查账号',`dockstatus`=2 where oid='{$b['oid']}' "); //对接成功 
            $redis->lPush('order_updates', "{$b['oid']}:请检查账号");
        }else{
            $result=addWk($b['oid']);
        }
        $d=$DB->get_row("select * from qingka_wangke_class where cid='{$b['cid']}' "); 
        if($result['code']=='1'){
            echo 'ok';
            $DB->query("update qingka_wangke_order set `hid`='{$d['docking']}',`status`='进行中',`dockstatus`=1,`yid`='{$result['yid']}' where oid='{$b['oid']}' "); //对接成功
            $redis->lPush('order_updates', "{$b['oid']}:进行中");
        }else{
            $DB->query("update qingka_wangke_order set `dockstatus`=2 where oid='{$b['oid']}' ");
            $redis->lPush('order_updates', "{$b['oid']}:对接失败");
        }
    }
    // 暂停10秒
    sleep(10);
}
?>

这段代码的作用是执行对接操作,将特定条件的订单进行对接,并更新相关订单的状态和进度信息。

具体步骤如下:

  1. 导入common.php文件。
  2. 创建Redis实例并连接到Redis服务器。
  3. 进入无限循环。
  4. 使用数据库查询获取满足特定条件的订单数据。
  5. 循环遍历查询结果。
  6. 根据订单数据的不同情况执行不同的对接操作。
  7. 如果用户账号为”1″,更新订单的状态为”请检查账号”,并更改对接状态为2(对接成功)。
  8. 如果学校名称为空,更新订单的状态为”请检查学校名字”,并更改对接状态为2(对接成功)。
  9. 如果用户账号为空,更新订单的状态为”请检查账号”,并更改对接状态为2(对接成功)。
  10. 如果以上条件都不满足,则调用addWk()函数进行对接操作,并将结果赋值给变量$result。
  11. 使用数据库查询获取对应课程的信息。
  12. 如果对接结果的code为1,表示对接成功,更新订单的相关信息(hid、status、dockstatus、yid),并将状态和订单号推入Redis的列表(order_updates)中。
  13. 如果对接结果的code不为1,表示对接失败,仅更改对接状态为2(对接成功),并将状态和订单号推入Redis的列表(order_updates)中。
  14. 暂停10秒,等待下一次循环开始。

然后使用守护进程持续监控脚本即可,具体教程可以看之前的文章

原创文章,作者:凹凸曼SVIP,如若转载,请注明出处:https://www.studyace.club/643.html

(1)
上一篇 2023年12月15日 下午7:17
下一篇 2024年3月17日 下午9:03

相关推荐

发表回复

登录后才能评论