问题一:启用监听收不到过时时间消息,缘由是未开启配置
解决办法是 在redis配置文件内开启 notify-keyspace-events Ex或者在redis命令行 redis-cli 使用命令:php
config set notify-keyspace-events Ex
问题二:PredisConnectionConnectionException : Error while reading line from the serverredis
缘由是Redis默认连接时间未60秒,在database.php设置read_write_timeout为0便可。this
"read_write_timeout"=>0
问题三:ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context
这个是由于一个Redis连接使用监听时,没法使用其余命令。须要从新创建一个连接。期初我使用 new \Predis\Client(),一直报错,我也不知道为啥。而后我想到了使用集群,使用相同配置。将监听事件设置为单独实例。具体操做以下:spa
//datebase.php配置页面 'redis' => [ 'client' => 'predis', 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, "queue" => '{default}',//queue站点默认走的redis ], 'publisher' => [ //redis 订阅监听 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, "read_write_timeout"=>0,//长链接不要断 ], ] //监听页面 //__keyevent@*__:expired监听过时消息 $redis=Redis::connection('publisher');//建立新的实例 $redis->psubscribe(['__keyevent@*__:expired'], function ($message, $channel) { echo $message; Redis::set('aa','123');//这样就不会报错了。这里使用的是default的,是两个redis连接。 });