Java と PHP 間で Memcached に保存されたデータを共有する際の問題と解決策
PHP で書き込まれたデータは Java で読み取ることができず、Java で書き込まれたデータは PHP で文字化けとして読み取ることができます。
PHP が提供する memcache 拡張プロトコルに基づいて独自の Java memcached クライアントを作成した場合、ここでは、
java; を使用した MemCachedClient パッケージを提供します。
php_extension: php_memcache.dll / memcache.so java_jar: MemCachedClient [com.danga.MemCached.*]解決策:
MemCachedClient のソース コードを確認したところ、Java は格納された値のタイプに基づいてフラグを設定する場合が異なることがわかりました。
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が配列やオブジェクトを書いた場合、javaがそれを読み込んだ後はjson.decodeでOKです。
1階 マズリー 2011-10-12