You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP无法反序列化Redis中Python存储的序列化缓存数据,如何处理?

问题解答

1. 存储的数据格式

你Redis中存储的是Python专属的pickle序列化二进制数据,输出中开头的\x80\x04就是pickle v4协议的固定标识。这种格式是Python特有的对象序列化结构,PHP原生没有对应的解析逻辑,所以直接读取打印会显示为乱码二进制内容。

2. 读取反序列化的可行方案

方案1:Python侧调整为通用序列化格式(优先推荐,跨语言兼容性最好)

修改Python应用的存储逻辑,把会话数据序列化为JSON格式再存入Redis,两边均可直接解析:

  • Python侧存数据示例:
import json
import redis

r = redis.Redis()
session_data = {
    "_permanent": True,
    "identity_context_data": {
        "_authenticated": True,
        "_username": "your_username"
    }
}
# 替换原pickle.dumps逻辑为json序列化
r.set("mp-app-session", json.dumps(session_data))
  • PHP侧读取解析代码:
$arList = $redis->mGet(['mp-app-session']);
$session_data = json_decode($arList[0], true);
echo '<pre>';print_r($session_data);die;

方案2:PHP侧安装pickle解析扩展(仅适用于无法修改Python侧代码的场景)

安装PHP的pickle解析扩展,直接反序列化二进制数据:

  1. 安装扩展命令:
    pecl install pickle
  2. 解析代码示例:
$arList = $redis->mGet(['mp-app-session']);
$session_data = pickle_decode($arList[0]);
echo '<pre>';print_r($session_data);die;

注意:pickle序列化内容存在反序列化安全风险,请确保你读取的数据源完全可信,避免执行恶意构造的序列化内容。

内容的提问来源于stack exchange,提问作者Pand005

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:36:02