問題タブ [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 - simple-spring-memcached で同じキー オブジェクトに異なるキャッシュ キーを指定する方法
で分散キャッシュを実装しようとしていspring-memcached
ます。ドキュメントは、オブジェクトをキーとして使用するには、ドメインクラスに @CacheKeyMethod アノテーションを付けたメソッドが必要であることを示唆しています。
しかし、問題は、異なるシナリオで同じドメイン クラスを使用しており、それぞれのケースで生成されるキーのロジックが異なることです。User
クラスの例では、シナリオの 1 では、 city
andに関してキーが一意である必要がありますgender
が、他のケースでは、ユーザーの に関して一意である必要がありますemail
。それは基本的に、ルックアップのベースです。
ユーザーの電子メールによって都市と性別が決まるため、最初のケースでも電子メールをキーとして使用できますが、これはユーザーごとに個別のキャッシュ エントリを意味し、キャッシュされたデータは性別と都市が同じである限り同じになります。 、これにより、ヒット率が大幅に増加すると予想されます(バンガロールの男性であると予想されるユーザーの数を考えてみてください)。
異なるキーを定義する方法はありますか。また、キーを生成するロジックをドメイン クラス自体から外部化できるとよいでしょう。
私はドキュメントを読んで、何かが呼び出されたCacheKeyBuilder
、および/またはCacheKeyBuilderImpl
トリックを実行できることを理解しましたが、続行する方法がわかりませんでした。
編集.. わかりました..私は1つの手がかりを得ました! CacheKeyBuliderImpl が行うことは、提供されたドメイン クラスのメソッドで @cachekeyannotation を検索し、見つかったメソッドを実行してキーを取得する defaultKeyProvider インスタンスで generateKey メソッドを呼び出すことです。
したがって、CacheKeyBuilderImpl
をカスタム Implに置き換えるか、 KeyProvider
CacheKeyBuilderImpl 内の のデフォルトの実装を自分のものに置き換えるとうまくいくかもしれませんが、キープロバイダーの参照は DefaultKeyProvider に組み込まれています。
誰でも私が CacheKeyBuilder を実装するのを手伝ってもらえますか(さまざまなメソッドが何をするかに関して;ドキュメントはそれを明確にしません)、また、通常の CacheKeyBuilderImpl の代わりに使用するためにそれを注入する方法を教えてください
java - net.spy.memcached.OperationTimeoutException: 値を待っているタイムアウト
setOfKeys としてキーを使用して、一連の値を memcached クライアントに保存しています。次のようにmemcachedに値を入れています
しかし、次のようにキャッシュからsetOfKeysをフェッチしようとすると、エラーが発生します
net.spy.memcached.OperationTimeoutException: Timeout waiting for value
java - spymemcached および HashAlgorithm.KETAMA_HASH を使用する場合のリカバリ memcached ノードの処理方法
spymemcached & HashAlgorithm.KETAMA_HASH を使用して、5 ノードの memcached のプールに接続しています。
私の理解では、ノードがダウンしているときに、キーが再配布されるため(最小限の影響で)心配する必要はありません。
ダウンしたノードがプールに参加しようとしている場合はどうなりますか。私は何をする必要がありますか?
古いデータを削除する必要があることを確認する必要がありますか? または、この場合、プログラムに特別な処理が必要ですか?