最近在使用 pcntl_fork
进行多进程编程父子进程都用到 Redis 的时候,遇到一个问题
当子进程结束后,父进程正在使用的 Redis 连接资源会报错
Redis::get(): send of 40 bytes failed with errno=32 Broken pipe
尝试了父子进程各自单独建立 Redis 的连接资源「非单例模式」,依旧会报错
网上似乎有说法说是 Redis 的 Bug
- 解决办法
最后解决办法是在 pcntl_fork
前先把当前的 Redis 资源释放,创建子进程后再重新建立连接
$redis->close();
pcntl_fork(0;
$redis = getRedis();