加入收藏 | 设为首页 | 会员中心 | 我要投稿 源码网 (https://www.900php.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2022-01-19 03:35:59 所属栏目:PHP教程 来源:互联网
导读:故事背景:我用java插入一条数字记录,用php读取无法正确读取,今天发现如果使用MemCachedClient来插入一条数字,或者java的对象,那么在php调出来就是乱码,对象可以理解,简单的数字也会乱码,如:mcc.set(a,25);php中出来的是乱码,同时如果采用telnet的方
  故事背景:我用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端的代码为:
 
  <?php
  $mem=new Memcache;
  $mem->connect("192.168.1.20",27688);
  $mem->set("my_key","my_value",FALSE , 86400);
  $my_v=$mem->get("my_key");
  var_dump($my_v);
  $mem->close();
  ?>
  经检测,php写入后,用php和在memcache命令行都能获取的很好,但是,用下面的java代码获取,却获取到null
 
  import com.danga.MemCached.MemCachedClient;
  import com.danga.MemCached.SockIOPool;
  public class CacheReader {
  static private MemCachedClient client =new MemCachedClient();
  static{
     String[] servers = { "192.168.1.20:27688"};
     SockIOPool pool = SockIOPool.getInstance();
     pool.setServers(servers);
     pool.initialize();
  }
  public void   get(String name){
     System.out.println(client.get(name));
  }
  public static void main(String[] args) {
     new CacheReader().get("my_key");
  }
  }
  一开始,我还以为是我的编码的问题,或者是某些参数设置的问题。后来,我想可能是各种memcache的客户端的寻址方式不太一样吧。几经周折,还是间接的解决了这个问题:我更换了java端的memcache的客户端,采用net.spy.memcached.MemcachedClient就可以了,代码如下:
 
  import java.io.IOException;
  import java.net.InetSocketAddress;
  import net.spy.memcached.MemcachedClient;
  public class SpyMem {
  public static void main(String[] args) {
     try {
      MemcachedClient c=new MemcachedClient(new InetSocketAddress("192.168.1.20",27688));
      System.out.println(c.get("my_key"));
      c.shutdown();
     } catch (IOException e) {
      e.printStackTrace();
     }
  }  
  } 

(编辑:源码网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读