解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问题.
报错如下:
解决方法如下:
修改 ./app/docker/php8.1/php.ini (这里看你使用的php版本, 我用的是8.1所以修改 8.1 下的 php.ini).
添加一行:
// 设置 php socket 链接的超时时间
default_socket_timeout = -1
修改后大概是这个样子:
然后重新 build docker 容器:
./vendor/bin/sail build
重新 build 后, php 配置信息就会发生改变. 再次启动 redis 订阅就不会超时了.
问题到这里就解决了, 但是如果你的问题没有解决, 你可以继续往下看:
我查看了 laravel redis 的服务提供者中关于 redis 链接的源码 Illuminate\Redis\RedisManager 类.
connector 是一个链接构造器, 根据你配置的不同, 返回 Illuminate\Redis\ConnectorsPhpRedisConnector 或者 Illuminate\Redis\Connectors\PredisConnector 的实例. 然后实例调用了 connect() 方法.
可以看到 PredisConnector 是返回了一个 Predis\Client 类的实例, 并且 option 会和 [‘timeout’=> 10.0] 进行一个合并. 而 PhpRedisConnector 是返回了一个 phpredis 扩展的 Redis类 实例. 查阅文档 Redis 类构造函数参数如下. 可以看到 timeout 的默认值为 0.
…
总之如果修改 php.ini 没能解决问题的话, 在 app/config/database 中修改 redis 的配置项, 添加或修改 timeout 配置项为 0 就 ok .
参考资料:
(6条消息) Redis 异常 read error on connection 解决方案_潘广宇的博客-CSDN博客_jedis连接异常
原问题链接:
laravel redis 发布订阅, 运行一段时间后提示链接错误的问题 | Laravel | Laravel China 社区 (learnku.com)
本作品采用《CC 协议》,转载必须注明作者和本文链接