<?php
// 修改redis.conf notify-keyspace-events "Ex"
#  当事件发生时, Redis 可以通知 Pub/Sub 客户端。
#  可以在下表中选择 Redis 要通知的事件类型。事件类型由单个字符来标识:
# K     Keyspace 事件,以 _keyspace@<db>_ 的前缀方式发布
# E     Keyevent 事件,以 _keysevent@<db>_ 的前缀方式发布
# g     通用事件(不指定类型),像 DEL, EXPIRE, RENAME, …
# $     String 命令
# s     Set 命令
# h     Hash 命令
# z     有序集合命令
# x     过期事件(每次 key 过期时生成)
# e     清除事件(当 key 在内存被清除时生成)
# A     g$lshzxe 的别称,因此 ”AKE” 意味着所有的事件
# notify-keyspace-events 带一个由 0 到多个字符组成的字符串参数。空字符串意思是通知被禁用。
#  例子:启用 list 和通用事件:
# notify-keyspace-events Elg
#  默认所用的通知被禁用,因为用户通常不需要改特性,并且该特性会有性能损耗。
#  注意如果你不指定至少 K 或 E 之一,不会发送任何事件。
# notify-keyspace-events AKE

//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':
                //写需要执行的接口  自行修改
                //todo
                echo 1;
                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');