2016-11-21 6 views
1

私は書店を書いています。電子書籍のList<Ebook>と通常の書籍のリストList<Book>をキャッシュしたいので、ページが更新されるたびにデータベースを呼び出す必要はありません。Spring SimpleCacheManagerを使用して複数のリストをキャッシュする方法は?

今私はSimpleCacheManagerを使用していますし、私は2つのdifferntのキャッシュ定義:showBookList(...)またはshowEbookList(...)が初めて呼び出された場合List<...>は、サービスによってキャッシュされ、ページがリロードされる場合

<bean id="cacheManager" class="org.springframework.cache.support.SimpleCacheManager"> 
    <property name="caches"> 
     <set> 
      <bean 
       class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" 
       p:name="bookList" /> 
      <bean 
       class="org.springframework.cache.concurrent.ConcurrentMapCacheFactoryBean" 
       p:name="ebookList" /> 
     </set> 
    </property> 
</bean> 

を書籍/電子書籍がキャッシュからロードされる。私が電子書籍を追加または削除すると、サービスはキャッシュを更新します。これはこれを行う正しい方法ですか、それとも簡単な方法ですか?

ほとんどの場合、1つのキャッシュで十分ですが、Springフレームワークはパラメータとして渡す複数のキャッシュもサポートしています。

自分のコードがよく書かれているか、あまりにも複雑すぎるかどうかは尋ねられます。私はWebsphere Portal 8.5.5でSpring 4.3.2を使用しています。私はJSR286ポートレットを構築しています。

答えて

1

キャッシュは、少なくともこのコンテキストでは、マップと考えることができます。 2つのキャッシュがある場合は、2つのマップがあります。

スプリングキャッシングでは、default key generationはメソッド名とパラメータに基づいており、戻り値をキャッシュします。ですから、それぞれのメソッドはすでに別々のエントリに終わります。

キャッシュを分割する賛否両論があります。ルックアップは、検索するキーのセットがより少ないためにスピードアップすることができますが、ハッシュマップは最近かなり高速であるため、通常は些細なので、メリットを得るにはかなり大きなマップが必要です。欠点は、メモリオーバーヘッドと管理するキャッシュの複雑さです。

あなたのアプリがシンプル/スモール/エンタープライズではない場合は、問題がないかぎり/までシンプルにするために、私は単一のキャッシュに傾いています。

関連する問題