Heim  >  Artikel  >  Backend-Entwicklung  >  java 和 php共享memcached数据注意有关问题

java 和 php共享memcached数据注意有关问题

WBOY
WBOYOriginal
2016-06-13 13:06:20811Durchsuche

java 和 php共享memcached数据注意问题
在很多时候,一台memcached server中的数据,需要被不同语言的客户端访问。

在理想的情况下,一种语言写,其他语言读可能不会造成一些兼容的问题。

日前遇到了java和php共享数据的问题,php写入的时候,java可以读取;java写入的,php读取时候数据解析有误。

分析memcached中的数据:
telnet memcache-srv1 11211
get key[enter]

发现php写入,和java写入的数据存在一点差异。

php:VALUE key 1 250
java:VALUE key 0 250

   大家发现了吧,就是一个状态位不一致导致。在java中,这个状态为用于压缩等其他标识,而在php中,用于作为判断php的对象(比如:array等)。
检查php代码,发现它是直接把array对象,传给php memcached 函数,由其进行序列化,以及加入标识,在读取的时候,其直接反馈相应的php对象。

   set:
   $out = array();
   $out['field1'] = "me";
   $mc->set($key, $out, NULL, 12 * 3600);
   
   get:
   $out=$mc->get($key);
   echo $out['field1'];

解决方案:
  使用传给php memcached客户端的时候,先序列化好。取的时候,在反序列化一次。
  
   set:
   $out = array();
   $out['field1'] = "me";
   $mc->set($key, serilized($out), NULL, 12 * 3600);
   
   get:
   $out=$mc->get($key);
   echo unserilized($out)['field1'];
   

  或者,修改java的memcacheClient源代码,不建议。

1 楼 a254939392 2011-10-11  
盛大的点点滴滴点点滴滴点点滴滴滴滴
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn