predis 监听不到 key 过期事件,Redis-cli 可以收到
predis监听不到key过期事件,redis-cli可以收到
redis 4.0.11
laravel 5.8
redis.conf 已改
想做一个会员到期自动关闭,或者续费自动更新过期时间,想到redis的发布订阅key过期事件,在Command代码里面redis设置一个过期的key redis-cli可以收到过期通知,在redis-cli设置一个过期的key,redis-cli也是可以正常收到,唯独Command里面收不到?这是啥坑?
public function handle()
{
$cache_db = config('database.redis.default.database',0);
$pattern = '__keyevent@'.$cache_db.'__:expired';
Redis::setex('Company_Member:10215858212874015', 5, '10215858212874015');
echo Redis::get('Company_Member:10215858212874015');
Redis::subscribe([$pattern], function ($channel) {
echo 'message:';
});
}
当我不监听key过期,用redis设置一个测试的频道testchannel
在我的业务代码中把
Redis::setex('Company_Member:'.$info->id, 5, $info->id);
换成
Redis::publish('testchannel', 'hello world');
然后命令行修改代码订阅testchannel
public function handle()
{
$cache_db = config('database.redis.default.database',0);
//$pattern = '__keyevent@'.$cache_db.'__:expired';
$pattern = 'testchannel';
// Redis::setex('Company_Member:10215858212874015', 5, '10215858212874015');
// echo Redis::get('Company_Member:10215858212874015');
Redis::psubscribe([$pattern], function ($message, $channel) {
echo 'message:'. $message;
});
}
神奇的事情发生了
我现在有挺多问号的。。。
已解决不使用facede的redis.如下:
$redis = new \Redis();
$redis->connect('127.0.0.1', '6379');
$redis->setOption(\Redis::OPT_READ_TIMEOUT, -1);
$cache_db = config('database.redis.default.database');
$pattern = '__keyevent@'.$cache_db.'__:expired';
$redis->psubscribe([$pattern], function ($message, $channel, $chan, $msg)
{
echo $msg;
});
本作品采用《CC 协议》,转载必须注明作者和本文链接
一样,我也遇到相同的问题,寻思很久还是没找出问题所在,楼主解决了吗?@
请问有遇到过redis拓展和predis冲突,然后导致监听延时事件的PHP文件找不到Redis类的情况吗
laravel的redis有前缀,注意下。