laravel使用redis監聽在內部再次使用redis遇到的問題

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