tp5.1+redis 订单超时取消 windos
2021/10/21 19:11:32
本文主要是介绍tp5.1+redis 订单超时取消 windos,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
我使用的是tp5.1
安装redis 扩展不细节描述
phpstudy 安装的redis 需要修改默认配置文件
步骤1:
redis 的配置修改:
notify-keyspace-events "Ex"
重启redis
步骤2:
创建公用redis类
<?php namespace app\command\Controller; use think\cache\driver\Redis; class MyRedis { private $redis; public function __construct($host = '127.0.0.1', $port = 6379) { $this->redis = new Redis(); $this->redis->config('notify-keyspace-events','Ex');//开启redis key 过期通知(修改配置文件失效可加上) $this->redis->connect($host, $port); $this->redis->auth('123456'); } public function setex($key, $time, $val) { return $this->redis->setex($key, $time, $val); } public function set($key, $val) { return $this->redis->set($key, $val); } public function get($key) { return $this->redis->get($key); } public function expire($key = null, $time = 0) { return $this->redis->expire($key, $time); } public function psubscribe($patterns = array(), $callback) { $this->redis->psubscribe($patterns, $callback); } public function subscribe($patterns = array(), $callback) { $this->redis->subscribe($patterns, $callback); } public function setOption() { $this->redis->setOption(\Redis::OPT_READ_TIMEOUT, -1); } }
步骤3:
//下单业务插入redis public function redis(){ $redis = new \app\command\Controller\MyRedis(); $order_num = 2; $redis->setex("orderNum_".$order_num,20,$order_num); echo "待确认订单生成成功,20 秒后自动取消订单号:".$order_num; } //取消订单、支付成功删除redis数据 public function noRedis(){ $redis = new \app\command\Controller\MyRedis(); $order_num = 2; //删除订单过期标记 $redis->del("orderNum_".$order_num); //修改数据库订单状态 Db::name('')->update(); echo "修改成功".$order_num; }
步骤4:
app->command.php
<?php return [ 'app\command\Test', ];
步骤5:
编辑监听方法 cmd运行 项目根目录 php think test
<?php namespace app\command; use think\console\Command; use think\console\Input; use think\console\Output; use app\common\controller\MyRedis; use think\Db; class Test extends Command { protected function configure() { // 指令配置 $this->setName('test') ->setDescription('测试订单过期处理'); // 设置参数 } protected function execute(Input $input, Output $output) { ini_set('default_socket_timeout', -1); // 指令输出 $redis = new \app\command\Controller\MyRedis(); //其他地方找的redis操作 $redis->setOption(); $redis->psubscribe(array('__keyevent@0__:expired'), function ($redis, $pattern, $chan, $msg) { echo PHP_EOL; echo "Pattern: $pattern\n"; echo "Channel: $chan\n"; echo "Payload: $msg\n\n"; echo 'order:订单处理成功\n'; /*业务逻辑处理*/ $quey = Db::name(); }); } }
前台下单后过期显示
处理成功
这篇关于tp5.1+redis 订单超时取消 windos的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-08阿里云Redis项目实战入门教程
- 2024-11-08阿里云Redis资料:新手入门与初级使用指南
- 2024-11-08阿里云Redis教程:新手入门及实用指南
- 2024-11-07阿里云Redis学习入门:新手必读指南
- 2024-11-07阿里云Redis学习入门:从零开始的操作指南
- 2024-11-07阿里云Redis学习:初学者指南
- 2024-11-06阿里云Redis入门教程:轻松搭建与使用指南
- 2024-11-02Redis项目实战:新手入门教程
- 2024-10-22Redis入门教程:轻松掌握数据存储与操作
- 2024-10-22Redis缓存入门教程:快速掌握Redis缓存基础知识