問題タブ [spymemcached]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
memcached - memcached クライアント: 接続の開始、終了、および再利用
spymemcached および xmemcached クライアントをテストしています。プロジェクトのドキュメントで答えを見つけようとしていますが、非常に貧弱です。
私の質問は、接続の開始、終了、および再利用に関するものです。私はこれを1つのドキュメントで見つけました:
クライアントは、接続が不要になった時点でいつでも接続を閉じることができます。ただし、クライアントは、データを保存または取得する必要があるたびに接続を再開するのではなく、接続をキャッシュすることをお勧めします。接続をキャッシュすると、TCP 接続の確立に関連するオーバーヘッドがなくなります。」
Spymemcached は接続プールを提供しないため、インスタンスを作成するたびにMemcachedClient
新しい接続を作成していますよね? では、いつ接続を閉じる必要がありますか? アプリケーション内のすべてのスレッドに同じインスタンスを提供する必要がありますか?それとも毎回新しいインスタンスを作成する必要がありますか?
xmemcached には接続プールがあります。この場合、プールから取得した接続を閉じる必要がありますか?
java - 多くのクライアントに対して 1 つの Memcached サーバー
2 つのアプリケーション サーバー (coldfusion / Java) と 1 つの memcached があります。そのようにmemcachedサーバー/クライアントをセットアップしたい。サーバー 1 がキーに値を追加すると、サーバー 2 でも使用できるようになります。逆の場合も同様です。
サーバー1でキーの値を追加すると、2番目のサーバーで読み取りまたは編集できなくなります。設定方法
私はspymemcachedをクライアント ライブラリとして使用しています。
ご協力いただきありがとうございます
spymemcached - 複数の membase サーバー用の Spymemcached ハッシュ アルゴリズム
プラットフォーム: spymemcached-2.7.3.jar、64 ビット Windows 7 OS
2 つの membase サーバー (非クラスター環境) があり、memcache からデータを設定および取得するために spymemcached Java クライアントを使用しています。2 つの membase サーバー間でレプリケーションを使用していません。
次のコードを使用して memcache にデータを設定しています。MemcachedClient のように見えますが、利用可能な場合は、最初に server1 にデータを配置/取得しようとします。server1 がダウンしている場合、MemcachedClient は server2 から put/get します。spymemcached はハッシュアルゴリズムを使用して、データを設定/取得する必要があるサーバーを決定しますか? それがどのように機能するかを説明する利用可能なドキュメントはありますか?
コード
memcached - Spymemcache - Memcache/Membase フェイルオーバー
プラットフォーム: 64 ビット Windows OS、spymemcached-2.7.3.jar、J2EE
キャッシング ソリューションに 2 台の memcache/membase サーバーを使用したいと考えています。各 memcache/membase サーバーに 1 GB のメモリを割り当てて、合計で 2 GB のデータをキャッシュできるようにします。memcache からデータを設定および取得するために spymemcached Java クライアントを使用しています。2 つの membase サーバー間でレプリケーションを使用していません。
J2EE アプリケーションの起動時に memcacheClient オブジェクトをロードします。
その後、memcacheClient を使用して memcache/membase サーバーの値を取得および設定します。
memcacheClient は server1 からのみ値を設定および取得しているようです。
server1 を停止すると、値の取得/設定に失敗します。server1 がダウンした場合、server2 を使用すべきではありませんか? ここで何か間違ったことをしている場合はお知らせください...
memcached - Memcached クライアント getStats 可能な統計のキーのリスト?
MemcachedClient には、統計値の文字列キーを受け入れるgetStatsメソッドがあります。使用できるキーのリストはありますか?
また、これはローカル操作ですか、それともこれらの統計を取得するためのサーバーへのブロッキング呼び出しですか?
memcached - Java で spymemcached を使用して Amazon ElastiCache をセットアップする
Amazon Cloud の Memcached に関する適切なチュートリアルを見つけることができませんでした。また、このキャッシング全体についてはまったくの初心者です。Amazon の ElastiCache サービスを介して memcached を使用し、spymemcached クライアントを使用して実際に memcached 呼び出しを実行しようとしています。
私が今Javaでやっていることは次のとおりです。
これを試したときに表示されるエラーは次のとおりです。
誰でもこれに関するアイデアや経験がありますか? ありがとう!
java - memcachedクライアントのシャットダウンで時々シャットダウンを再生します
私の本番プレイサーバーは、警告なしにシャットダウンすることがあります。
system.outの最後のメッセージは次のとおりです。
spymemcached.jarでエラーが発生します
なんで?何らかの理由?
ありがとう。
membase - メンベース?これはどのように作動しますか?
IP アドレスを追加して接続すると、クライアントはすべてのサーバーの使用可能な IP アドレスを取得しますか?
または、クライアントは、そのうちの 1 つがダウンした場合に備えて、少なくとも 2 つの IP アドレスを知っている必要がありますか?
これは私がテストしてきたコードです(JAVA)
IP アドレスを 1 つだけ追加した場合、取得および設定操作を行っているときにサーバーがダウンします。クライアントは利用可能な他のサーバーに接続できますか? オブザーバーを追加して利用可能なサーバーを表示しても、何も表示されないためです (リストにサーバーを 1 つだけ追加した場合)。これは、接続の失敗を回避するために、できるだけ多くの IP アドレスを追加する必要があるということですか?
もう 1 つの質問は、IP アドレスを追加するときに、特定の vBucket にリンクされているポート番号を入力する必要があることです。すべてのクライアントが同じ vbucket を監視することでオーバーフローが発生しますか? もしそうなら、異なる vBucket を監視するためにクライアントのバランスを取るにはどうすればよいですか?
私の英語がうまく伝わらなかったらごめんなさい T^T.
どんな種類のアドバイスや回答も大歓迎です! ありがとう!
memcached - memcachedクライアントとサーバー間で280qpsを実現するにはどうすればよいですか?
SpymemcachedをmemcachedJavaクライアントとして選択します。これは、応答のないsetメソッドが、他のmemcachedクライアントよりも10倍速いように見えるためです。
私のコード:
memcachedClient.set(key、0、value);
それ以外の:
memcachedClient.set(key、0、value).get();
セットの結果よりもはるかに多くの時間コストを気にします。
今でははるかに高速に見えますが、memcachedクライアントでメモリリークが発生する可能性があります。
memcachedサーバーと同じコンピューターで4を実行すると、memcachedクライアントプロセスごとに2Gメモリが処理されます。そして、8コアのCPUと4Gメモリはほぼ完全に消費されています。ローカルネットインターフェイス「lo」は、わずか約0.2ギガビット/秒です。
CPUとメモリの消費率を下げ、memcachedqpsを高速化するにはどうすればよいですか。
memcachedクライアントから280kqpsが必要です。各qpsは、50Bのキー長と500Bの値の長さのデータを送信します。ここで、ネットワークインターフェイスの帯域幅の制限を回避するために、ローカルホストでmemcachedクライアントを起動しようとしています。4つのmemcahcedプロセスで、それぞれが6つのスレッドを実行します。これで、目標からはほど遠い180qpsをほぼ実現でき、CPUとメモリが制限になります。また、実際のJavamemcachedクライアントを含む同じコンピューターでストームを実行する必要があります。したがって、もちろん、memcachedクライアントがコアリソースを使用することを許可することはできません。
CPUとメモリの消費を減らすにはどうすればよいですか、または単一のコンピューター上の複数のJavamemcachedクライアントと分散memcachedサーバーの間で280qpsを実現するにはどうすればよいですか。
getとsetの両方がクエリの半分を取ります。getMultiを試して毎回50個のキーをフェッチできるかもしれません。しかし、疑問はまだあります。
あなたの親切な返事を期待しています。ありがとう!
java - spymemcached のサンプル コードがわかりません
spymemcached クライアントを使用してキャッシュ ロジックを実装しています。どういうわけか、キャッシュ内の一部のコンテンツを同時に変更するために CAS を使用する必要があります。
所有者がここからCASMutationの使用方法の非常に良い例をすでに示しているのを見ました: http://code.google.com/p/spymemcached/wiki/Examples#Using_CAS
しかし、コードのこの部分について 1 つの質問があります。
コメントを注意深く読んでも、ここで何をしようとしているのか正確にはわかりません。「ll」にコピーせずに「current」だけを使用するとどうなるでしょうか。潜在的な問題は何ですか?
[アップデート]
サンプル コードに従って、次のようなメソッドを実装しています。うまくいきますか?
スレッドセーフかどうかが一番心配です。