2 つの異なるキャッシュ実装を抽象化する方法
-
21-08-2019 - |
質問
負荷分散された Web アプリで分散キャッシュを使用する予定です。そこで、Apache ehcache と memcached の間の共通機能を抽象化してみます。
私の目標は、使用するキャッシュ ソリューションを選択するための簡単な構成スイッチを作成できるようにすることです。SPI ルートに進むべきでしょうか。XML パーサーがどのように接続されているかのように?
解決
頭のてっぺんから…
- 一般的なキャッシュ関連メソッド (add()、remove()、refresh() が最も明白なものとして思い浮かびます) を使用してインターフェイスを作成します。
- その下で目的のキャッシュを使用するインターフェイスの実装を作成します (「MyEhCacheImplementation」や「MyMemCachedImplementation」など)。
- 数値、文字列、列挙型などの単純な値に基づいて何らかのタイプのキャッシュを返す CacheFactory を作成します。デフォルト実装のフォールバックを作成することを忘れないでください。
- 初期化時にその単一の値をファクトリに注入する何らかの方法を作成します。たとえば、起動時にさまざまな設定を読み取るクラスがある場合、または Spring applicationContext.xml などを使用している場合は、キャッシュの初期化メソッドを作成する必要があります。これはその 1 つのパラメータを受け取り、ファクトリを呼び出して正しいタイプのキャッシュを返したり、キャッシュを使用している場所にキャッシュを設定したりします。
構造的にこれだけで確実に動作し、必要に応じていつでも拡張できるようになると思います。
他のヒント
インターフェースを固定した後、これは本当に生成に関するパターンの問題です。キャッシュ選択戦略は実行時に決定するのSpring Beanファクトリを使用することができ、ダイナミックである場合に依存性の注入は、私のお気に入りです。春は、あなたがしたい場合は、工場はセッションごとに決定させることができることを意味し、ウェブアプリケーションの「セッション」スコープをサポートしています。
それ以外の場合は、単純なサービスロケータも、トリックを行う必要があります。
春はまた、あなたがやって探している正確に何をキャッシュプロバイダモジュールを持っています。でも、私はただのmemcachedがサポートされているかはわかりません。でも、それは手ローリング独自のインタフェースよりも少ない作業であるかもしれないためのアダプターを書いて、そうでない場合。 https://springmodules.dev.java.net/docs/を参照してください。参照/ 0.8 / html_single /#キャッシュする
所属していません StackOverflow