程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> java存入信息php讀寫memcache亂碼問題

java存入信息php讀寫memcache亂碼問題

編輯:關於PHP編程

我們利用java把數據寫入然後利用php讀出,但這樣利用php讀出時發現了在memcache亂碼問題出來了,下面我來給大家介紹memcache亂碼的解決辦法。

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端的代碼為:

 代碼如下 復制代碼

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved