这个问题真是奇妙,且听我细细说来:已确定memcached安装使用正常(已良好运行几个月之久)
最近想要做点优化,将一些数据也写入memcache
其中包含几个对象
其它几个对象写入十分正常,但是有一个对象死活写不进去
示例代码如下:
$obj = new obj();
$objStr = serialize($obj);
$mem->set('obj_1',$objStr);
print_r($mem->get('obj_1'));
echo '<br>';
print_r($objStr);对于写入正常的对象来说  上述代码输出两段相同的字串,字串的内容当然是$objStr。而当要对某一对象进行如上述操作时呢,问题来了,print_r($mem->get('obj_1'));打印出来为空。而我试着将打印出来的$objStr字串直接复制到程序里,让其写入memcache,成功写入!试了一晚上 百思不得其解,为什么这个对象序列化后如法写入memecache呢?该对象结构如下:
obj_2
{
$a;
$b;
$c;
$d = obj_3;
$e = obj_4;
$f = obj_5;
}怀疑是不是这个对象里的成员包含对象,导致的呢?
但是序列化之后$objStr是一个字符串,根据PHP的说法,“可以存储于任何地方”,直接拷贝到程序里可以写入,由程序生成的值却无法写入,这是什么原因呢?
请高手指教!

解决方案 »

  1.   

    我自己结贴吧 - -经过千方百计的试验,终于找出了这个GOOGLE百度皆无果的问题的答案。原因是:要存入memcache中的对象不能含有私有变量,当然,她所包含的对象元素对象也不能含有私有变量。原因很简单,找出来确实废了我太多心血- - 累死我了,希望这个帖子对以后遇到该问题的人有所帮助。
      

  2.   

    晕,我没有这个问题呀,我这里可以正常存入有私有变量的对象,不可能有这么傻的BUG吧?一个对象的变量基本上都是私有的。不过我用的是JAVA客户端,PHP 客户端难道有问题?