
缓存值经过特定序列化方式写入后,读取方必须使用兼容方式解码。切换igbinary、PHP客户端或插件实现时,不能假定旧缓存都能自动识别。应先核对各运行环境的扩展与配置,再按官方迁移路径处理旧值和回退。
服务端不理解PHP对象语义
Redis保存数据,但通常不会替客户端解释PHP对象的内部表示。相同键下的字节是否能被正确读取,取决于写入与读取程序的约定。连接成功只能证明通信建立,不能证明某个已有缓存值能够按新格式还原为预期类型。
网页和后台任务要一致
PHP-FPM、命令行和任务进程可能加载不同扩展或不同配置。若只有部分进程启用igbinary,可能出现交替写入不同格式或读取失败。先列出所有实际访问缓存的进程,核对扩展可用性和插件配置,不只看后台诊断中的一个绿色状态。

切换要安排缓存边界
阅读所用插件和客户端对序列化更改的处理说明,制定可恢复的切换步骤。旧格式不能读取时,应通过受支持方式隔离或重建可丢弃缓存,避免手工修改二进制内容。若同一实例还有其他业务数据,绝不能把整库清空当作通用迁移方法。
用数据类型做回归
在隔离环境选择字符串、数组、布尔值与含中文的样本验证往返读取,并测试更新、过期和删除。若缓存PHP对象,还需考虑类加载和版本变化。记录切换前后的客户端与扩展版本,回退时也要考虑新格式值,不能只还原一行配置就算结束。
关键区别

序列化:对象变为字节;客户端负责。
Redis服务:保存和返回数据;不替应用解码。
回退:恢复兼容读取;也要处理新值。
怎样确认处理到位
验证不仅要求无报错,还要比较返回类型和内容,网页、任务与命令行结果一致。上线后若出现反序列化警告,应按预案处理,不能隐藏日志继续运行。
容易误判的边界
不要假定换客户端必然保留格式兼容,也不要以“只是缓存”为由清空共享实例。涉及不可重建的数据时,应先确认其序列化和恢复方案。
