1.3. Spring キャッシュアノテーション
@Cacheable および @CacheEvict アノテーションは、メソッドにキャッシュ機能を追加します。
@Cacheable- 戻り値をキャッシュに保存します。
@CacheEvict- 古いエントリーを削除してキャッシュサイズを制御します。
@Cacheable
Book オブジェクトを例ととすると、BookDao#findBook(Integer bookId) などのメソッドのデータベースから読み込み後に各インスタンスをキャッシュしたい場合は、以下のように @Cacheable アノテーションを追加します。
@Transactional
@Cacheable(value = "books", key = "#bookId")
public Book findBook(Integer bookId) {...}
@Transactional
@Cacheable(value = "books", key = "#bookId")
public Book findBook(Integer bookId) {...}
上記の例では、findBook(Integer bookId) が books という名前のキャッシュに保存されている Book インスタンスを返す場合。
@CacheEvict
@CacheEvict アノテーションを使用すると、books キャッシュ全体をエビクトするか、特定の #bookId に一致するエントリーのみを削除するかどうかを指定できます。
キャッシュエビクション全体
deleteAllBookEntries() メソッドに @CacheEvict のアノテーションを付け、以下のように allEntries パラメーターを追加します。
@Transactional
@CacheEvict (value="books", key = "#bookId", allEntries = true)
public void deleteAllBookEntries() {...}
@Transactional
@CacheEvict (value="books", key = "#bookId", allEntries = true)
public void deleteAllBookEntries() {...}
エントリーベースのエビクション
deleteBook(Integer bookId) メソッドに @CacheEvict のアノテーションを付け、以下のようにエントリーに関連付けられたキーを指定します。
@Transactional
@CacheEvict (value="books", key = "#bookId")
public void deleteBook(Integer bookId) {...}
@Transactional
@CacheEvict (value="books", key = "#bookId")
public void deleteBook(Integer bookId) {...}