Memcached中Perl序列化存储的对象PHP无法读取的解决
2010-04-20 20:10
253 查看
Perl Memcached的客户端序列化对象采用的是Storable模块的nfreeze方法,而这个方法又调用了c扩展的do_store方法;反序列化使用的是Storable模块的thaw方法,而这个方法又是调用的c扩展的do_retrieve方法。
而在PHP中,进行的却是serialize和unserialize操作。造成了无法正常读取的结果。
Perl存储一个('a', 'c')数组的引用,
命令行获取的结果如下:
用二进制编辑器查看存储的结果如下:
在PHP中memcache客户端gzuncompress和unserialize函数处理前可以得到存储的数据,打印出来如下图所示:
和上面二进制编辑器查看的结果是一致的。
memcached的官方文档:http://code.google.com/p/memcached/wiki/FAQ
里也提到
由此可以看到,在不同语言的客户端访问memcached,由于对象序列化算法不一致,造成无法直接的进行读取和解析。
比较好的办法是通过通用的格式例如JSON、YAML进行存储和读取,或者调用服务,或者采用Thrift、Gearman这样的跨语言平台来解决。
但是对于已有的数据,有没有可以直接访问的办法呢?
Perl可以可以安装PHP serialize and unserialize in Perl模块实现和php一样的序列化,具体解决办法参加惊峰的博客:http://www.jeftom.com/?p=212#respond。
而在PHP中,进行的却是serialize和unserialize操作。造成了无法正常读取的结果。
Perl存储一个('a', 'c')数组的引用,
命令行获取的结果如下:
用二进制编辑器查看存储的结果如下:
在PHP中memcache客户端gzuncompress和unserialize函数处理前可以得到存储的数据,打印出来如下图所示:
和上面二进制编辑器查看的结果是一致的。
memcached的官方文档:http://code.google.com/p/memcached/wiki/FAQ
里也提到
由此可以看到,在不同语言的客户端访问memcached,由于对象序列化算法不一致,造成无法直接的进行读取和解析。
比较好的办法是通过通用的格式例如JSON、YAML进行存储和读取,或者调用服务,或者采用Thrift、Gearman这样的跨语言平台来解决。
但是对于已有的数据,有没有可以直接访问的办法呢?
Perl可以可以安装PHP serialize and unserialize in Perl模块实现和php一样的序列化,具体解决办法参加惊峰的博客:http://www.jeftom.com/?p=212#respond。
相关文章推荐
- Memcached中Perl序列化存储的对象PHP无法读取的解决
- Memcached中Perl序列化存储的对象PHP无法读取的解决
- 【框架-MFC】CObject 继承对象的序列化存储与读取
- Java序列化对象的存储和读取
- PHP 对象的存储与传输(序列化 serialize 对象)
- hbuilder的aptana php插件无法提示命名空间之外函数和对象的解决办法
- PHP 对象的存储与传输(序列化 serialize 对象)
- 关于:“无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化
- 无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。
- Java对象序列化追加的问题,以及Java的读取多个对象的问题解决方法。
- Java对象序列化追加的问题,以及Java的读取多个对象的问题解决方法。
- Python3基础 pickle.dump和load 读一个对象进行序列化存储及读取
- 存储两次序列化对象,读取报错问题 java.io.StreamCorruptedException: invalid type code: A
- 【问题解决】Redis存储Hash-Map<String,Object>时无法序列化问题
- PHP IE下载时提示”无法复制 无法读取源文件或磁盘”的解决办法
- 关于:“无法序列化会话状态。在“StateServer”或“SQLServer”模式下,ASP.NET 将序列化会话状态对象,因此不允许使用无法序列化的对象或 MarshalByRef 对象。如果自定义会话状态存储在“Custom”模式下执行了类似的序列化,则适用同样的限制。”的问题
- 【C#】解决进行反序列化时出错:。InnerException 消息是“反序列化对象 属于类型 System.String 时出现错误。读取 XML 数据时,超出最大字符串内容长度配额 (8192)。
- 在PHP中无法连接Memcached的解决办法
- PHP IE下载时提示”无法复制 无法读取源文件或磁盘”的解决办法
- 将python对象序列化成php能读取的格式(即能反序列化到对象)