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:';
  });
}

predis监听不到key过期事件,redis-cli可以收到

predis监听不到key过期事件,redis-cli可以收到

当我不监听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;
      });
  }

神奇的事情发生了

predis 监听不到 key 过期事件,Redis-cli 可以收到

我现在有挺多问号的。。。

已解决不使用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 协议》,转载必须注明作者和本文链接
这个超级宇宙无敌菜的实习生
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 3

一样,我也遇到相同的问题,寻思很久还是没找出问题所在,楼主解决了吗?@

3年前 评论
CodeFarmer1997 (楼主) 3年前

请问有遇到过redis拓展和predis冲突,然后导致监听延时事件的PHP文件找不到Redis类的情况吗

3年前 评论
CodeFarmer1997 (楼主) 3年前
Epona 3年前
MyDeserve (作者) 3年前
MyDeserve (作者) 3年前

laravel的redis有前缀,注意下。

3年前 评论
CodeFarmer1997 (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!