一、psubscribe
redis订阅命令
Cache::store(‘redis’)->handler()->psubscribe(array(‘keyevent@1:expired’), ‘app\command\RedisCallback::keycallback’);
订阅redis 1 库的过期事件,触发app\command\RedisCallback::keycallback命令
二、使用步骤
1.开启reids过期事件通知
在redis配置文件中搜索‘notify-keyspace-events’(1062行左右)
notify-keyspace-events “Ex”
2.创建自定义指令
php think make:command RedisCallback callback
<?php
declare (strict_types = 1);
namespace app\command;
use app\server\Redis;
use think\console\Command;
use think\console\Input;
use think\console\input\Argument;
use think\console\input\Option;
use think\console\Output;
use think\facade\Cache;
class RedisCallback extends Command
{
protected function configure()
{
// 指令配置
$this->setName('callback')->setDescription('redis过期回调');
}
protected function execute(Input $input, Output $output)
{
$output->writeln('进命令了');
//设置redis超时时间 -1永不超时
Cache::store('redis')->handler()->setOption(\Redis::OPT_READ_TIMEOUT, -1);
//订阅redis 1 库的过期事件,触发app\command\RedisCallback::keycallback命令
Cache::store('redis')->handler()->psubscribe(array('__keyevent@1__:expired'), 'app\command\RedisCallback::keycallback');
$output->writeln('回调完了');
}
public static function keycallback($redis, $pattern, $channel, $msg){
echo "已删除订单编号" .$msg."\n\n";
/*TODO处理业务逻辑*/
}
}
2.运行自定义指令
nohup php think callback &
// 不挂断 , 后台运行 命令
3.查看结果
创建一个key(order:2015168)过期时间10秒
十秒后…
[root@wj lpf_admin]# 已删除订单编号order:2015168