問題一:啓用監聽收不到過時時間消息,緣由是未開啓配置
解決辦法是 在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連接。 });