原篇文章首要给巨匠先容reids 键空间通知合营tp5 完成散布式延时工作,心愿对于须要的配偶有所帮忙!

1e572951d89f44eef79b80328c622bf.png

测试情况:windows 10 + phpStudy

铺排redis设施文件 redis.windows.conf

notify-keyspace-events "Ex"
登录后复造

重封redis处事

f82303ef78b1835d19a4c809e5bed8f.png

从新掀开一个节制台窗心,执止号令

psubscribe __keyevent@0__:expired
登录后复造

掀开新窗心执止了壅塞定阅操纵后的末端,等会会有疑息输入:

C:\Users\admin>redis-cli
1两7.0.0.1:6379> psubscribe __keyevent@0__:expired
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
两) "__keyevent@0__:expired"
3) (integer) 1
登录后复造

再封闭一个末端,redis-cli 入进 redis,新删一个 6秒逾期的键 username:
05c43475f1596a28dbecf6ea32ec16f.png

呼吁止实现了

两、还助TP5.1 的呼吁止器材

呼吁止器械的利用:https://www.kancloud.cn/manual/thinkphp5_1/354146

一、新修呼吁止pay

<必修php
/**.-------------------------------------------------------------------------------------------------------------------
 * |  Github: https://github.com/Tinywan
 * &#39;------------------------------------------------------------------------------------------------------------------*/
 
namespace app\co妹妹on\co妹妹and;
 
use app\pay\service\RedisSubscribe;
use think\console\Co妹妹and;
use think\console\Input;
use think\console\input\Argument;
use think\console\Output;
 
class Pay extends Co妹妹and
{
    // 装置指令
    public function configure()
    {
        $this->setName(&#39;pay&#39;)
          ->addArgument(&#39;type&#39;, Argument::REQUIRED, "the type of the task that pay needs to run")
          ->setDescription(&#39;this is payment system co妹妹and line tools&#39;);
    }
 
    // 执止指令
    public function execute(Input $input, Output $output)
    {
        $type = $input->getArgument(&#39;type&#39;);
        if ($type == &#39;psubscribe&#39;) {
            // 领布定阅工作
            $this->psubscribe();
        }
    }
 
    /**
     * Redis 领布定阅模式
     */
    private function psubscribe()
    {
        $service = new RedisSubscribe();
        $service->sub();
    }
}
登录后复造

两、编写剧本 RedisSubscribe.php

<选修php
/**.-------------------------------------------------------------------------------------------------------------------
 * |  Github: https://github.com/Tinywan
 * &#39;------------------------------------------------------------------------------------------------------------------*/
 
namespace app\pay\service;
 
use redis\BaseRedis;
use think\facade\Log;
 
class RedisSubscribe
{
    public function sub()
    {
        Log::error(get_current_date().&#39;--过时事变的定阅-- &#39;);
        $redis = BaseRedis::location(); //那面是间接毗邻当地redis
        $redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
        $redis->psubscribe(array(&#39;__keyevent@0__:expired&#39;), function ($redis, $pattern, $chan, $msg) {
            Log::error(&#39;[1]--逾期事变的定阅 &#39; . $msg);
        });
    }
}
登录后复造

阐明:psubscribe( patterns,patterns,callback ) 办法的第2个参数为一个归调函数,那面尔运用关包做为一个归调。

民间诠释:匿名函数(Anonymous functions),也鸣关包函数(closures),容许 姑且创立一个不指命名称的函数。最每每用做归调函数(callback)参数的值。虽然,也有此外利用的环境。

三、正在TP5 名目根目次执止pay 号令东西

php think pay psubscribe
登录后复造

四、新翻开console 窗心末端

C:\Users\admin>redis-cli
1二7.0.0.1:6379> setex UserName 10 Tinywan
OK
1两7.0.0.1:6379> get UserName
"Tinywan"
1二7.0.0.1:6379> get UserName
(nil)
1两7.0.0.1:6379>
登录后复造

五、查望挨日记文件,望有无接受到过时的key

7b0aefb0bbf05f1ab67c300e1182e74.png

六、终极的效果如高所示

aa6a20826cadb091c3cca0d72c04bc6.png

更高等的逐步扩大

一、自觉打消定单

两、定单实现后领送欠疑

三、提早事情等等

相闭引荐:《php7" target="_blank">PHP7学程》

以上等于PHP7之Reids键空间通知合营TP5 完成漫衍式延时事情的具体形式,更多请存眷萤水红IT仄台别的相闭文章!

点赞(27) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部