dangaクライアントをベースにした古いmemcachedクライアントの実装がありますが、若干変更されています。このクライアントは現在Memcached-Java-Clientと呼ばれています。MemcachedクライアントをMemcached-Java-ClientからXmemcachedに移行する
私が手にしている実装は古いものであり、維持されておらず、偽りのようです。
私は次の制約を持つ新しいクライアントに、クライアントを移行する必要があります。
- 私は古いものと互換性があるように、新しいクライアントのハッシュアルゴリズムを必要とします。この制約が満たされない場合は、サイトを(少なくとも部分的に)数時間は使用できなくする必要があります。
- さまざまなシリアル化メソッドをサポートし、シリアル化メソッドの拡張性を可能にします。
- 既存のクライアントよりもパフォーマンスが向上しました。
- Moxi
現在の実装では、私は古いクライアントによって保存されたキーのキャッシュヒットを得ることができないことを除いてXmemcachedで使用される一貫性のあるハッシュへの互換性があるように見えた一貫性のハッシュアルゴリズムを使用すると互換性がありますXmemcachedクライアントで取得されます。
私はコードをデバッグしましたが、私は同じハッシュコードを取得しましたが、私はサーバーリングが違うと思うので、全体のハッシング方法が異なります。
これは私がxmemcachedクライアントを初期化するために使用されるコードです:
final MemcachedClientBuilder builder = new XMemcachedClientBuilder(AddrUtil.getAddresses("server:11211 server:11212 server:11213 server:11214"));
builder.setCommandFactory(new BinaryCommandFactory());
builder.setSessionLocator(new KetamaMemcachedSessionLocator());
builder.setTranscoder(new WhalinTranscoder());
memcachedClient = builder.build();
は私が仕事にxmemcached得ることができない場合もspymemcachedを試してみることを喜んで、私は、後を好みます。
編集: spymemcachedも試してみましたが、現在のクライアントと互換性がありません。
final ConnectionFactoryBuilder builder = new ConnectionFactoryBuilder();
builder.setProtocol(Protocol.BINARY);
builder.setTranscoder(WhalinTranscoder());
builder.setHashAlg(HashAlgorithm.KETAMA_HASH);
builder.setLocatorType(Locator.CONSISTENT);
final MemcachedClient client = MemcachedClient(builder.build(), AddrUtil.getAddresses("server:11211 server:11212 server:11213 server:11214"));
なぜ、spymemcachedに興味がないのですか? moxiの作者とspymemcached(私)の作者は同じ日に同じ部屋に座っています。私たちは多くの仕事をしています。しかしもっと重要なことは、あなたのすべての要件はspymemcachedの目標であり、memcached自体にも取り組んでいる有料の開発者とオープンソースの貢献者の両方がいることです。 – Dustin
これは良い入力です@ダスティン。私はこの情報を知らなかった。 xmemcachedの作成者が行ったベンチマークで、より良い結果が得られました+マルチスレッド化されているため、重い負荷ではパフォーマンスが向上すると仮定しました。私はまだこの仮定を検証しておらず、依然として私の他の要件を満たす必要があります。また、どれが魅力的なAPIを持っているかを確認したい。 –
@ダスティンは、ダンガと互換性のある一貫したハッシュアルゴリズムをspymemcachedですか? –