php Redis定时执行或延迟(异步)

本方法缺点:当redis停止运行后或监听进程被关闭,在该时间段到时间段redis会丢失,在时间之外不影响

安装Redis就不说了  

个人偏使用宝塔

先配置redis

(百度的:windows配置文件redis配置文件 redis.windows.conf)

notify-keyspace-events "Ex"

宝塔的直接在redis里面配置即可(记住要双引号)

 

 

然后搞1个监听任务的(分配任务)和添值(添加任务)

在运行根目录新建文件redis_task.php(自己随便命名)一会儿要执行

 1 <?php
 2 //redis时间到期销毁执行
 3 function run_task($redis, $pattern, $chan, $key)
 4 {
 5     // 
 6     // echo "Pattern: $pattern\n";
 7     // echo "Channel: $chan\n";
 8     // echo "Msg: $key\n";
 9 
10     $data = json_decode(base64_decode($key),true);
11     $domain = 'http://tool.he4966.cn';
12     if($data){
13         
14         switch ($data['type']) {
15             case '1':
16                 //写需要执行的接口  自行修改
17                 echo file_get_contents($domain.'/api/order/query_baochang_pay_order?order='.$data['order']);
18                 break;
19             case '2':
20                 # code...
21                 break;
22             default:
23                 # code...
24                 break;
25         }
26     }
27     var_dump($data);
28   
29 
30 }
31 
32 
33 $redis = new \Redis();
34 //连接本地的 Redis 服务  可以更改自己的
35 $redis->connect("127.0.0.1", 6379);
36 
37 $redis->setOption(\Redis::OPT_READ_TIMEOUT,-1);
38 echo "任务消息开始监听..".PHP_EOL;
39 $redis->psubscribe(array('__keyevent@0__:expired'), 'run_task');
40 
41 ?>

添加任务的如下:这个随便写在某个接口下面或者那里也可以自行修改 然后访问就知道了

 1 <?php
 2 
 3 
 4 $redis = new \Redis();
 5 //连接本地的 Redis 服务
 6 $redis->connect("127.0.0.1", 6379);
 7 //这个key是最主要的交互数据,里面随便传自己需要的参数
 8 $key = base64_encode(json_encode(['order'=>'Dc2021042314551110210010180531','type'=>'1','time'=>time()]));
 9 $redis->set($key, "qq496631085");
10 $redis->expire($key, 300);//300秒后执行也就是5分钟后执行 自己修改
11 
12 
13 ?>

 

 

 执行命令 php redis_task.php(也可以用宝塔的插件来守护进程也可以

 

 

再访问写的添加数据即可

1
 
posted @ 2021-05-06 13:57  xiaohe520  阅读(539)  评论(0编辑  收藏  举报