11

私が使用しているAPI、spymemcachedは、基本的に

MemcachedClient memc = new MemCachedClient(new InetSocketAddress("host", port));

それは本当に私にconnect()またはisConnected()機能を与えません。APIは提供しますDefaultConnectionFactoryが、最初はコードを見ると、接続プールを管理しているようには見えません。spymemcachedまたは別のJavamemcachedライブラリでこれを行う方法を知っている人はいますか?

より一般的には、接続の喪失に対してアプリケーションを耐性にするための最も「道徳的な」方法は何ですか?

4

3 に答える 3

17

コンストラクターを呼び出すとMemcachedClient、memcachedサーバーに自動的に接続します。connect()またはisConnected()方法はありません。Spymemcachedとの接続が失われると、再接続が試行されます。また、これDefaultConnectionFactoryは、特別な接続属性(ハッシュ方式や障害モードなど)を指定するために使用されることを意図しています。接続ファクトリを使用する場合は、とMemcachedClientをとるコンストラクターを使用する必要があります。ConnectionFactoryList<InetSocketAddress>

Spymemcachedは単一のIOスレッドを使用しますが、マルチスレッドクライアントのように機能します。たとえば、1つのスレッドでは、1秒あたり最大50kのopsを実行できます。スレッドプールを作成する場合は、ユーザーアプリケーションで作成する必要があります。

より一般的には、接続の喪失に対してアプリケーションを耐性にするための最も「道徳的な」方法は何ですか?

上で述べたように、Spymemcachedは、サーバーへの接続が失われた場合に再接続を試みます。このプロセスには通常約17ミリ秒かかります。ただし、クライアントを使用するほとんどの人は、アプリケーションコードにスレッドプールを作成します。

于 2012-05-22T23:25:51.077 に答える
0

最初にオブジェクトプールを作成できます。次に、設定、削除、または取得操作を実行しているときに、プールからオブジェクトを借用できます。MemcachedClientは、コンストラクターを呼び出すと自動的にサーバーに接続します。

于 2014-07-08T10:09:59.233 に答える
0

接続をプールするためにDBCPを使用する人もいます。あなたはそれがプールしているgithubで3levelmemcacheプロジェクトを見ることができます。

于 2014-08-18T06:25:05.570 に答える