tp5通过redis键过期 和命令行 实现未支付订单删除功能

话不多说 安排!
1.首先准备redis 环境 (PHP redis 拓展要装 )
我这里是5.0的环境
tp5通过redis键过期 和命令行 实现未支付订单删除功能_第1张图片
然后 vim redis.conf 更改配置
tp5通过redis键过期 和命令行 实现未支付订单删除功能_第2张图片
找到notify-keyspace-events 更改为Ex(不懂可以看这个 https://redis.io/topics/notifications 有详解 不解释了)
tp5通过redis键过期 和命令行 实现未支付订单删除功能_第3张图片
接下来 重启 redis 进入redis
启动redis 使用config get * 查看 notify _keyspace-events 的值是不是xE
如果没有 重启 引入配置加载
打开 两个界面 (PSUBSCRIBE会阻塞其他进程 所以要打开两个 )
在其中一个输入PSUBSCRIBE keyevent@0:expired
tp5通过redis键过期 和命令行 实现未支付订单删除功能_第4张图片
会出现3条数据 然后在第二个页面中
输入设置 为过期时间为10秒的订单编号
setex 20200107 10 1
在这里插入图片描述
然后10秒过后
第一个页面会出现
tp5通过redis键过期 和命令行 实现未支付订单删除功能_第5张图片
而最后的4 就是我们刚才设置的key
而此时 redis 过期已经走通
下面 开始 php走起(Tp5框架命令行)
要求 PHP 需开启 redis拓展
找到 项目 cd 到 cd application/
vim command.php
在这里插入图片描述
定义命令行位置
创建command 下的Del .php
编写命令行

	namespace app\command;
   
  
  use think\console\Command;
  use think\console\Input;
  use think\console\Output;
  
  class Del extends Command
  {
     
      protected function configure()
      {
     
          parent::configure();
          $this->setName('del')->setDescription('Delete Out Time Order');
      }
  
      protected function execute(Input $input, Output $output)
      {
     
          $this->getkey();
          $output->writeln("ok");
      }
      public function getkey(){
     
          ini_set('default_socket_timeout', -1);
          $redis = new \Redis();
          $redis->connect("127.0.0.1", 6379);
          $redis->auth('123456');
          //redis 订阅 第二个 是个 回调函数
          $redis->psubscribe(array('__keyevent@0__:expired'), 'app\command\Del::keyCallback');//回调必须写绝对路径 要不然 会报错
  
  
      }
       public static function keyCallback($redis, $pattern, $channel, $message) {
     
          file_put_contents('order.log',$message."\r\n",FILE_APPEND);
          //随便写个 log 记录 不要复制  要不然会在项目的 根目录出现  记得写路径
          //在这里写逻辑啊 写数据库操作 
          
          echo '已删除订单编号:'.$message;
  	}
  
  }

然后编写 一个简单的 原生php setex.php



$redis = new Redis();

$redis->connect("127.0.0.1", 6379);
$redis->auth('123456');
$redis->setex("20200107001", 15, 123);

$redis->setex("20200107002", 25, 123);

编写两个订单号
tp5通过redis键过期 和命令行 实现未支付订单删除功能_第6张图片
运行 php setex.php

写完后进入项目 使用 php think del 运行
在这里插入图片描述
过了25秒后
在这里插入图片描述
这个缺点是页面 关闭后 会结束del 命令行
所以 要给 他加入 后台启动
nohup php think del &
在这里插入图片描述
他会在目录下生成nohup.out 进行存储 可以关闭 页面
如果 要结束这个任务
可以使用 ps -ef|grep “php think del” 查看pid
在这里插入图片描述
然后使用 kill -9 干掉他

你可能感兴趣的:(命令行,curl,redis,php)