php专区

 首页 > php专区 > PHP应用 > 常用功能 > java存入信息php读写memcache乱码问题 - php高级应用

java存入信息php读写memcache乱码问题 - php高级应用

分享到:
【字体:
导读:
          故事背景:我用java插入一条数字记录,用php读取无法正确读取,今天发现如果使用MemCachedClient来插入一条数字,或者java的对象,那么在php...

java存入信息php读写memcache乱码问题

故事背景:我用java插入一条数字记录,用php读取无法正确读取,今天发现如果使用MemCachedClient来插入一条数字,或者java的对象,那么在php调出来就是乱码,对象可以理解,简单的数字也会乱码,如:mcc.set("a",25);php中出来的是乱码,同时如果采用telnet的方式来进行查询 get a 出来问号。

翻了一圈说要改类包,最后发现个问题,如果改用字符串,那么java和php就能通用了,代码如下:mcc.set("a","25″);

而且telnet 192.168.0.1 11211进入进行get也能得出正确的数字了,本来我要对a这个值进行加法运算,觉得采用int会方便一些,居然和php读取memcache的时候有冲突。还是来回进行变量类型转换吧。

如果你也在使用java写入memcache,php读出memcache,通用一个字符串存储,就可以避免很多问题了,不是java的类包不行。

java读取php写入memcache内容

当前需求:php将key为"my_key",value为"my_value"写入到memcache中,然后用java连接memcache读取my_key的值my_value,php端的代码为:

  1. $mem=new Memcache; 
  2. $mem->connect("192.168.1.20",27688); 
  3. $mem->set("my_key","my_value",FALSE , 86400); 
  4. $my_v=$mem->get("my_key"); 
  5. var_dump($my_v); 
  6. $mem->close(); 
  7. ?> 

经检测,php写入后,用php和在memcache命令行都能获取的很好,但是,用下面的java代码获取,却获取到null

  1. import com.danga.MemCached.MemCachedClient; 
  2. import com.danga.MemCached.SockIOPool; 
  3. public class CacheReader { 
  4. static private MemCachedClient client =new MemCachedClient(); 
  5. static
  6.    String[] servers = { "192.168.1.20:27688"}; 
  7.    SockIOPool pool = SockIOPool.getInstance(); 
  8.    pool.setServers(servers); 
  9.    pool.initialize(); 
  10. public void   get(String name){ 
  11.    System.out.println(client.get(name)); 
  12. public static void main(String[] args) { 
  13.    new CacheReader().get("my_key"); 

一开始,我还以为是我的编码的问题,或者是某些参数设置的问题。后来,我想可能是各种memcache的客户端的寻址方式不太一样吧。几经周折,还是间接的解决了这个问题:我更换了java端的memcache的客户端,采用net.spy.memcached.MemcachedClient就可以了,代码如下:

  1. import java.io.IOException; 
  2. import java.net.InetSocketAddress; 
  3. import net.spy.memcached.MemcachedClient; 
  4. public class SpyMem { 
  5. public static void main(String[] args) { 
  6.    try { 
  7.     MemcachedClient c=new MemcachedClient(new InetSocketAddress("192.168.1.20",27688)); 
  8.     System.out.println(c.get("my_key")); 
  9.     c.shutdown(); 
  10.    } catch (IOException e) { 
  11.     e.printStackTrace(); 
  12.    } 
  13. }  
分享到:
hp在IIS下和apache下urlrewrite返回不同...
hp在IIS下和apache下urlrewrite返回不同的REQUEST_URI解决办法 php在windows IIS平台运作的时候,有些东西和在Linux apache下不太一样,今天遇到个神奇的问题,就是用 $URI=$_SERVER["REQUEST_URI"]; 在linux下看到的是urlrewrite静态化以后的地址 /exy/exk/list-3/,windows下返回的是原来的...
php中json_encode格式中文问题解决方法 -...
php中json_encode格式中文问题解决方法 今天要在MySQL 存储php中json_encode格式信息,英文时没有问题,但是中文时就碰到了遇到中文时,会变成一堆类似uxxxx信息。 1. 原因分析:在存储到数据库时,MySQL不会存储 unicode 字符,MySQL仅支持从基本的多语种平面字符 (0×0000-0xFFFF),请尝试存储...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……