java 情報の保存 php の読み取りと書き込み memcache が文字化けする問題_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:57:45
オリジナル
1067 人が閲覧しました

データをjavaで書き込み、phpで読み出すのですが、phpで読み出すとmemcacheが文字化けする問題が発生することが分かりましたので、その解決方法を紹介します。 memcache 内の文字。

javaはphpを読み取り、memcacheコンテンツを書き込みます

ストーリーの背景: Java を使用してデジタル レコードを挿入しましたが、php を使用して正しく読み取ることができませんでした。

今日、MemCachedClient を使用して数値または Java オブジェクトを挿入すると、PHP で呼び出すと文字化けすることがわかりました。

オブジェクトは理解できますが、単純な数字も文字化けします

として

コードは次のとおりです コードをコピー
mcc.set("a",25);

PHP から出力されるのは文字化けしたコードであり、クエリに Telnet を使用すると

をゲット

疑問符が出てきます。

パラパラとめくった後、パッケージのカテゴリを変更したいと言いました。

最後に問題が見つかりました。代わりに文字列を使用すると、java と php は同じように使用できます。

コードは次のとおりです コードをコピー
mcc.set("a","25");

さらに、Telnet 192.168.0.1 11211 を使用して正しい番号を取得できます。

元々、値 a を追加したかったので、int を使用した方が便利だと考えましたが、実際には PHP の memcache の読み取りと競合しました。変数の型を前後に変換してみましょう。

memcache への書き込みに Java を使用し、memcache からの読み取りに php を使用し、同じ文字列ストレージを使用している場合は、多くの問題を回避できます。

Java ではないクラス パッケージは動作しません。


javaはphpを読み取り、memcacheコンテンツを書き込みます

現在の要件: PHP は、キーを「my_key」として、値を「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が取得されてしまいます

コードは次のとおりです コードをコピー

com.danga.MemCached.MemCachedClientをインポートします;
import com.danga.MemCached.SockIOPool;

パブリック クラス CacheReader {

静的プライベート MemCachedClient クライアント =new MemCachedClient();
静的{
String[] サーバー = { "192.168.1.20:27688"};
SockIOPool プール = SockIOPool.getInstance();
Pool.setServers(サーバー);
プール.initialize();
}
public void get(文字列名){
System.out.println(client.get(name));
}
public static void main(String[] args) {
new CacheReader().get("my_key");
}
}

最初は、エンコードかパラメータ設定に問題があるのではないかと思いました。後で、おそらくさまざまな memcache クライアントのアドレス指定方法が異なるのではないかと思いました。紆余曲折を経て、この問題は間接的に解決されました。Java 側の memcache クライアントを変更し、net.spy.memcached.MemcachedClient を使用しました。コードは次のとおりです:

コードは次のとおりです コードをコピー

インポートjava.io.IOException;
import java.net.InetSocketAddress;

net.spy.memcached.MemcachedClient をインポートします;

パブリッククラス SpyMem {
public static void main(String[] args) {
{
を試してください 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();
}
}
}

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632069.html技術記事 javaを使ってデータを書き込み、phpを使って読み出すのですが、memcacheが文字化けしていることが分かりました。 ...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート