教程集 www.jiaochengji.com
教程集 >  脚本编程  >  php  >  正文 java存入信息php读写memcache乱码问题

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

发布时间:2018-11-13   编辑:jiaochengji.com
教程集为您提供java存入信息php读写memcache乱码问题等资源,欢迎您收藏本站,我们将为您提供最新的java存入信息php读写memcache乱码问题资源
我们利用java把数据写入然后利用php读出,但这样利用php读出时发现了在memcache乱码问题出来了,下面我来给大家介绍memcache乱码的解决办法。

java读取php写入memcache内容

故事背景:我用java插入一条数字记录,用php读取无法正确读取。

今天发现如果使用MemCachedClient来插入一条数字,或者java的对象,那么在php调出来就是乱码。

对象可以理解,简单的数字也会乱码

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy1975')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy1975>mcc.set("a",25);

php中出来的是乱码,同时如果采用telnet的方式来进行查询
get a

出来问号。

翻了一圈说要改类包。

最后发现个问题,如果改用字符串,那么java和php就能通用了。

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy5084')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy5084>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端的代码为:

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy2482')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy2482>

<?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

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy5310')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy5310>

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就可以了。代码如下:

<table width="620" align="center" border="0" cellpadding="1" cellspacing="1" style="background:#FB7"> <tr> <td width="464" height="27" bgcolor="#FFE7CE"> 代码如下</td> <td width="109" align="center" bgcolor="#FFE7CE" style="cursor:pointer;" onclick="doCopy('copy7318')">复制代码</td> </tr> <tr> <td height="auto" colspan="2" valign="top" bgcolor="#FFFFFF" style="padding:10px;" class="copyclass" id=copy7318>

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();
   }
}
}

您可能感兴趣的文章:
java存入信息php读写memcache乱码问题
PHP如何操作Memcache缓存?
Memcache与MySQL同是使用的配置详解
emlog中使用memcache缓存配置修改方法
PHP连接Memcache程序代码
MEMCACHE做为PHP的SESSION HANDLER
memcache安全相关
php提示PHP class x has no unserializer解决办法
php导入文件出现乱码
PHP网站session共享几种方案

[关闭]
~ ~