laravel使用redis监听在内部再次使用redis遇到的问题
问题一:启用监听收不到过期时间消息,原因是未开启配置
解决办法是 在redis配置文件内开启 notify-keyspace-events Ex或者在redis命令行 redis-cli 使用命令:
config set notify-keyspace-events Ex
问题二:PredisConnectionConnectionException : Error while reading line from the server
原因是Redis默认链接时间未60秒,在database.php设置read_write_timeout为0即可。
"read_write_timeout"=>0
问题三:ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in this context
这个是因为一个Redis链接使用监听时,无法使用其他命令。需要重新建立一个链接。期初我使用 new \Predis\Client(),一直报错,我也不知道为啥。然后我想到了使用集群,使用相同配置。将监听事件设置为单独实例。具体操作如下:
//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链接。 });
相关推荐
smartbaby 2020-11-11
ljz0 2020-09-15
王道革 2020-11-25
wangdonghello 2020-11-03
Langeldep 2020-11-16
chenhualong0 2020-11-16
聚合室 2020-11-16
koushr 2020-11-12
MRFENGG 2020-11-11
guoyanga 2020-11-10
fackyou00 2020-11-10
Orangesss 2020-11-03
dongCSDN 2020-10-31
rainandtear 2020-10-30
Quietboy 2020-10-30
liuyulong 2020-10-29
fansili 2020-10-29
温攀峰 2020-10-23