私はmemcacheのドキュメントを調べていましたが、私はget
メソッドを参照して、指定されたキーの値を取得することができます。memcacheからのIdのリストのクエリ値
Memcacheサーバーへの1回のラウンドトリップで特定のキーセットの値をフェッチする方法はありますか?
私はmemcacheのドキュメントを調べていましたが、私はget
メソッドを参照して、指定されたキーの値を取得することができます。memcacheからのIdのリストのクエリ値
Memcacheサーバーへの1回のラウンドトリップで特定のキーセットの値をフェッチする方法はありますか?
質問にお答えします:はい、あります。 Redisのように直接サポートするのではなく、はい。
知りたいプロトコルレベルのサポートはquiet mode
であり、hereを参照できます。そして、私は以下のように引用:
クライアントは、(ネットワークの往復を減らすために、まだ重要!)マルチ取得実装する必要があり、nは要求パイプラインとして、最初のn-1はgetq/getkqされ、最後には、get/getk定期的なもの。
SpyMemcached
によれば、getBulk
を使用できます。 getBulk
の実装はfire n getq
オペレーションであり、その後にはnoop
オペレーションが1つ続きます。次のコードスニペットです:threadpool
を行うには
// set up the initial header stuff
ByteBuffer bb = ByteBuffer.allocate(size);
for (Map.Entry<Integer, byte[]> me : bkeys.entrySet()) {
final byte[] keyBytes = me.getValue();
final String key = keys.get(me.getKey());
// Custom header
bb.put(REQ_MAGIC);
bb.put(CMD_GETQ);
bb.putShort((short) keyBytes.length);
bb.put((byte) 0); // extralen
bb.put((byte) 0); // data type
bb.putShort(vbmap.get(key).shortValue()); // vbucket
bb.putInt(keyBytes.length);
bb.putInt(me.getKey());
bb.putLong(0); // cas
// the actual key
bb.put(keyBytes);
}
// Add the noop
bb.put(REQ_MAGIC);
bb.put((byte) NoopOperationImpl.CMD);
bb.putShort((short) 0);
bb.put((byte) 0); // extralen
bb.put((byte) 0); // data type
bb.putShort((short) 0); // reserved
bb.putInt(0);
bb.putInt(terminalOpaque);
bb.putLong(0); // cas
bb.flip();
setBuffer(bb);
何も、我々は一つのネットワークパッケージと1つの応答に入るすべてのデータでは、n個のmemcachedのパッケージのデータを送信する、としましょう。気にしないかもしれないので、私はマルチノードを扱うプロセスをスキップします。
wow ..私は数日前に 'memcacheガイドを実行する方法 'を完了しました。あなたの答えがあまりにもわかりにくいので、バイトで詳しく説明してください。....あなたからは、memcacheのユーザーはスレッドプールを使用して複数のリクエストを送信してマルチジェットを実装する必要がありますか? – Bhuvan
@ user2410148は、私が自分自身を少しはっきりさせた答えと希望を更新しました。 –