predis 監聽不到 key 過期事件,Redis-cli 可以收到

CodeFarmer1997發表於2020-04-29

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

然後命令列修改程式碼

 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 可以收到

我現在有挺多問號的。。。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

這個超級宇宙無敵菜的實習生

相關文章