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
|
|