先开启监听后,就可以添加过期任务了
一:配置redis
~~~
notify-keyspace-events "Ex"
~~~
宝塔的直接在redis里面配置即可(记住要双引号,配置后重启)
二:添加一个监听任务(监听过期的方法)和添加任务(设置redis缓存)
添加任务start-------------------------------------------------------------
```
$redis = new \Redis();
//连接本地的 Redis 服务
$redis->connect("127.0.0.1", 6379);
//这个key是最主要的交互数据,里面随便传自己需要的参数
$key = base64_encode(json_encode(['order'=>'Dc2021042314551110210010180531','type'=>'1','time'=>time()]));
$redis->set($key, "123456789",300);设置为300秒后过期 (自己修改)
```
添加任务end-----------------------------------------------------------------------------
监听任务start---------------------------------------------------------------
项目根目录创建文件 redis_task.php (文件名随意)
执行监听 (php redis_task.php)
```
<?php
//redis时间到期销毁执行
function run_task($redis, $pattern, $chan, $key)
{
//
// echo "Pattern: $pattern\n";
// echo "Channel: $chan\n";
// echo "Msg: $key\n";
$data = json_decode(base64_decode($key),true);
$domain = 'http://tool.he4966.cn';
if($data){
switch ($data['type']) {
case '1':
//写需要执行的接口 自行修改
echo file_get_contents($domain.'/api/order/query_baochang_pay_order?order='.$data['order']);
break;
case '2':
# code...
break;
default:
# code...
break;
}
}
var_dump($data);
}
$redis = new \Redis();
//连接本地的 Redis 服务 可以更改自己的
$redis->connect("127.0.0.1", 6379);
$redis->setOption(\Redis::OPT_READ_TIMEOUT,-1);
echo "订阅任务消息监听..".PHP_EOL;
$redis->psubscribe(array('__keyevent@0__:expired'), 'run_task');
```
监听任务end--------------------------------------------------