Java與php共用Memcached儲存資料中的問題與解決方案
Java與php共用Memcached儲存資料中的問題與解決方案
Posted by Demon at 05:57 上午 on 18, Aug 2010
php寫入的資料java讀不出來,java寫入的資料php讀取亂碼;
如果你根據php提供的memcache擴充協議來自行編寫java memcached client將不會有問題,我們這裡提到的是使用
java的 MemCachedClient 包;
php_extension: php_memcache.dll / memcache.sojava_jar: MemCachedClient [com.danga.MemCached.*]
解決方案:
經過查看MemCachedClient源碼,發現是 set 時 flags不同,java是根據儲存實值型別來訂flags的。
public static final int MARKER_BYTE = 1;public static final int MARKER_BOOLEAN = 8192;public static final int MARKER_INTEGER = 4;public static final int MARKER_LONG = 16384;public static final int MARKER_CHARACTER = 16;public static final int MARKER_STRING = 32;public static final int MARKER_STRINGBUFFER = 64;public static final int MARKER_FLOAT = 128;public static final int MARKER_SHORT = 256;public static final int MARKER_DOUBLE = 512;public static final int MARKER_DATE = 1024;public static final int MARKER_STRINGBUILDER = 2048;public static final int MARKER_BYTEARR = 4096;
為了方便,兩者間的資料轉換使用JSON格式;
php與java在儲存的時候實值型別均要求為String類型,
並且php在$mem->set(key,value,32,expire);加粗部門要注意,這個是必須的。
然後php寫入的資料,java那邊就能夠順利讀取了,當php寫入array,object時,java讀取後json.decode就OK了。
1 樓 maozilee 2011-10-12
我的用JSON傳遞沒有問題,MEMCACHE會自動判斷和序列化。