解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问题.

报错如下:

解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问题.

解决方法如下:

修改 ./app/docker/php8.1/php.ini (这里看你使用的php版本, 我用的是8.1所以修改 8.1 下的 php.ini).
添加一行:

// 设置 php socket 链接的超时时间
default_socket_timeout = -1

修改后大概是这个样子:

解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问题.

然后重新 build docker 容器:

./vendor/bin/sail build

重新 build 后, php 配置信息就会发生改变. 再次启动 redis 订阅就不会超时了.

解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问题.

问题到这里就解决了, 但是如果你的问题没有解决, 你可以继续往下看:

我查看了 laravel redis 的服务提供者中关于 redis 链接的源码 Illuminate\Redis\RedisManager 类.

解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问题.

connector 是一个链接构造器, 根据你配置的不同, 返回 Illuminate\Redis\ConnectorsPhpRedisConnector 或者 Illuminate\Redis\Connectors\PredisConnector 的实例. 然后实例调用了 connect() 方法.

解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问题.

解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问题.

解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问题.

可以看到 PredisConnector 是返回了一个 Predis\Client 类的实例, 并且 option 会和 [‘timeout’=> 10.0] 进行一个合并. 而 PhpRedisConnector 是返回了一个 phpredis 扩展的 Redis类 实例. 查阅文档 Redis 类构造函数参数如下. 可以看到 timeout 的默认值为 0.

解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问题.


总之如果修改 php.ini 没能解决问题的话, 在 app/config/database 中修改 redis 的配置项, 添加或修改 timeout 配置项为 0 就 ok .

解决 laravel-sail 环境下, redis subscribe 运行一段时间后报错的问题.

参考资料:
(6条消息) Redis 异常 read error on connection 解决方案_潘广宇的博客-CSDN博客_jedis连接异常

原问题链接:
laravel redis 发布订阅, 运行一段时间后提示链接错误的问题 | Laravel | Laravel China 社区 (learnku.com)

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!