で分散キャッシュを実装しようとしていspring-memcached
ます。ドキュメントは、オブジェクトをキーとして使用するには、ドメインクラスに @CacheKeyMethod アノテーションを付けたメソッドが必要であることを示唆しています。
しかし、問題は、異なるシナリオで同じドメイン クラスを使用しており、それぞれのケースで生成されるキーのロジックが異なることです。User
クラスの例では、シナリオの 1 では、 city
andに関してキーが一意である必要がありますgender
が、他のケースでは、ユーザーの に関して一意である必要がありますemail
。それは基本的に、ルックアップのベースです。
ユーザーの電子メールによって都市と性別が決まるため、最初のケースでも電子メールをキーとして使用できますが、これはユーザーごとに個別のキャッシュ エントリを意味し、キャッシュされたデータは性別と都市が同じである限り同じになります。 、これにより、ヒット率が大幅に増加すると予想されます(バンガロールの男性であると予想されるユーザーの数を考えてみてください)。
異なるキーを定義する方法はありますか。また、キーを生成するロジックをドメイン クラス自体から外部化できるとよいでしょう。
私はドキュメントを読んで、何かが呼び出されたCacheKeyBuilder
、および/またはCacheKeyBuilderImpl
トリックを実行できることを理解しましたが、続行する方法がわかりませんでした。
編集.. わかりました..私は1つの手がかりを得ました! CacheKeyBuliderImpl が行うことは、提供されたドメイン クラスのメソッドで @cachekeyannotation を検索し、見つかったメソッドを実行してキーを取得する defaultKeyProvider インスタンスで generateKey メソッドを呼び出すことです。
したがって、CacheKeyBuilderImpl
をカスタム Implに置き換えるか、 KeyProvider
CacheKeyBuilderImpl 内の のデフォルトの実装を自分のものに置き換えるとうまくいくかもしれませんが、キープロバイダーの参照は DefaultKeyProvider に組み込まれています。
誰でも私が CacheKeyBuilder を実装するのを手伝ってもらえますか(さまざまなメソッドが何をするかに関して;ドキュメントはそれを明確にしません)、また、通常の CacheKeyBuilderImpl の代わりに使用するためにそれを注入する方法を教えてください