我們利用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端的代碼為:
代碼如下 |
複製代碼 |
$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(); } } } |
http://www.bkjia.com/PHPjc/632069.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/632069.htmlTechArticle我們利用java把資料寫入然後利用php讀出,但這樣利用php讀出時發現了在memcache亂碼問題出來了,下面我來給大家介紹memcache亂碼的解決辦法。...