最近很多小伙伴问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)中,并定时执行这个操作。
具体步骤如下:
- 导入common.php文件,该文件可能包含了一些常用函数和数据库连接信息等。
- 创建Redis实例并连接到Redis服务器。
- 进入无限循环。
- 输出与Redis服务器的连接状态。
- 初始化变量$i,用于计算本次入队订单的数量。
- 使用数据库查询获取满足条件的订单数据。
- 遍历查询结果,将每个订单的订单号推入Redis的列表中。
- 更新变量$i,表示入队订单的数量。
- 输出本次入队订单的数量。
- 通过睡眠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)中取出订单号,然后根据订单号更新数据库中对应的订单状态和进度信息。
具体步骤如下:
- 导入common.php文件。
- 创建Redis实例并连接到Redis服务器。
- 进入无限循环。
- 使用lpop()方法从Redis的列表中取出一个订单号。
- 使用数据库查询获取该订单号对应的订单数据。
- 如果订单号不为空,执行以下步骤。
- 调用processCx()函数处理订单数据,返回结果赋值给变量$result。
- 循环遍历$result数组。
- 如果返回结果中包含”系统繁忙,请稍后再试。”的错误信息,暂停程序执行10分钟。
- 如果返回结果中包含成功的code和课程名称与查询结果中的一致,更新订单的进度、状态和备注信息。
- 使用数据库更新语句将更新后的订单信息写入数据库。
- 获取当前时间,并根据订单信息的变化输出相应的日志信息。
- 如果订单id对应的进度为空,则输出异常信息。
- 如果订单id对应的进度和查询结果的进度一致,则输出无需更新的信息。
- 如果订单id对应的进度和查询结果的进度不一致,则输出状态、进度和备注的更新信息。
- 通过睡眠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);
}
?>
这段代码的作用是执行对接操作,将特定条件的订单进行对接,并更新相关订单的状态和进度信息。
具体步骤如下:
- 导入common.php文件。
- 创建Redis实例并连接到Redis服务器。
- 进入无限循环。
- 使用数据库查询获取满足特定条件的订单数据。
- 循环遍历查询结果。
- 根据订单数据的不同情况执行不同的对接操作。
- 如果用户账号为”1″,更新订单的状态为”请检查账号”,并更改对接状态为2(对接成功)。
- 如果学校名称为空,更新订单的状态为”请检查学校名字”,并更改对接状态为2(对接成功)。
- 如果用户账号为空,更新订单的状态为”请检查账号”,并更改对接状态为2(对接成功)。
- 如果以上条件都不满足,则调用addWk()函数进行对接操作,并将结果赋值给变量$result。
- 使用数据库查询获取对应课程的信息。
- 如果对接结果的code为1,表示对接成功,更新订单的相关信息(hid、status、dockstatus、yid),并将状态和订单号推入Redis的列表(order_updates)中。
- 如果对接结果的code不为1,表示对接失败,仅更改对接状态为2(对接成功),并将状态和订单号推入Redis的列表(order_updates)中。
- 暂停10秒,等待下一次循环开始。
然后使用守护进程持续监控脚本即可,具体教程可以看之前的文章
原创文章,作者:凹凸曼,如若转载,请注明出处:https://www.studyace.club/643.html