workerman/redis 键超时订阅不成功,请大家帮看下代码哪里有问题? redis连接正常
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Redis\Client;
use Workerman\Timer;
use Workerman\Worker;
global $redis, $redis1;
$worker = new Worker("http://0.0.0.0:8111");
function timer_test(){
echo "\ntimer is running.";
global $redis1;
$redis1->setEx("test_key", 5, "123");
$redis1->setEx(
}
function expire_test($redis, $pattern, $channel, $message) {
echo "$pattern, $channel, $message";
}
$worker->onWorkerStart = function($worker) {
global $cfg, $redis1, $redis;
if($worker->id == 0){
Timer::add(10, "timer_test");
}
$redis1 = new Client('redis://127.0.0.1:6379');
$redis2 = new Client('redis://127.0.0.1:6379');
$redis2->psubscribe(array("__keyevent@0__:expired"), "expire_test");
};
$worker->onMessage = function($connection, $data) {
};
Worker::runAll();
2个回答
年代过于久远,无法发表回答
array("__keyevent@0__:expired")
改成只有字母的字符串试下。比如 array("test")__keyevent@0__:expired是redis规定的key超时订阅,改成一般字符串起不到效果
找到 redis.conf,把 notify-keyspace-events 设置为 Ex,重启redis。
我本地测试是ok的。另外 expire_test参数顺序为 ( $pattern, $channel, $message, $redis),最后一个参数是redis实例
redis.conf配置是开启了的,应该是参数的顺序搞错了,我再测一下,感谢!祝新年快乐!