诺亚方舟

沉淀

记录一则phpredis coredump事件

在使用项目工程部署在测试环境(docker)中时发现php连接redis后进程就挂掉了,没有任何报错日志,怀疑是coredump问题。找到相应的coredump文件后,分析得出是redis链接时设置参数问题。

经观察发现线上phpredis版本为2.2.5,docker内版本为2.1.3,项目框架中链接redis使用了参数$r->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_IGBINARY);效果就是会插入一串序列化的数据。QQ图片20190731220716

 

此处的问题是因为写入的数据是不带序列化的(属主机写入),读取时(docker)反序列化,直接就导致php进程coredump了。理解是phpredis高版本下取消了redis::SERIALIZER_IGBINARY这种序列化方式,因此需要注意的是项目框架kohana默认用的序列化方法是SERIALIZER_IGBINARY,而高版本的phpredis是不支持的,要尽量规避phpredis版本搭配问题。

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>