PHP 多进程编程下 Redis 的 Bug

最近在使用 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();

你可能感兴趣的:(PHP 多进程编程下 Redis 的 Bug)