Springキャッシュ——@Cachebale

1652 ワード

オリジナルステートメント:完全に著者のオリジナルですので、著者の労働力を尊重してください.転載は必ず原文の住所を明記してください.
@Cachebaleは、方法レベルに適用することも、クラスレベルの注釈に使用することもできる.spring 3.1からキャッシュ管理を実現しました.
  • @Cacheableは何ができますか?分かりやすく理解するために、栗を挙げます.一つの方法はgetBooksByUsernameAndLanguage(String username, int language)です.明らかにデータベースの中のすべての私の英語の本の対象を得る方法です.この関数の戻り値が大きく、ページ上で頻繁に呼び出されると、毎回の呼び出しはデータベースに再接続し、膨大な量のリストを返します.ページの応答とリソースの占有率が大きいかもしれません.私たちが望んでいるのは、この方法を初めて呼び出した時、戻ってきたデータをサーバー端のキャッシュに入れて、後でこの方法を呼び出す時に、直接にキャッシュから取り出してもいいです.これでデータベースのリソースを調べる必要がなくなります.@Cacheableの役割はこれです.
  • @Cacheableはどう使いますか?くりを挙げます.
    @Cacheable(value = "CACHE_BOOK",key = "#username", condition = "#language = 1")
    public List getBooksByUsernameAndLanguage(String username, int language) {
         // balabalabala...        
         return bookList;
    }
    
    コードを見ると、@Cacheableの注釈は三つの属性しかありません.
  • value:必要なものです.これは自分で取った名前です.この方法を初めて呼び出した時に戻ってきたbook Listはメモリのどこに存在するかを指定しました.
  • key:オプションです.SpEL式を使用するには、ここではパラメータusernameに対応しており、着信したusername値が変わったらキャッシュ内のデータを取りに行くのではなく、getBooksByUsernameAndLanguage方法を実行する.(これは必須です.usernameが変わったので、戻り値が変わります.キャッシュのデータが合わなくなりました.このオプションが重要です.)springはデフォルトでは方法の署名をkeyとしています.
  • condition:方法が戻った結果、book Listはキャッシュしますか?コンディションには限定条件が追加されています.この例では、入ってきた言語コードが1である限り、返ってきたbook Listはキャッシュされ、langageに他の値が伝えられたら、book Listはキャッシュされない.
  • 次はページ更新後のデータが更新されていないという問題があったら、@Cacheableがやっている鬼かどうか覚えてください.
    補足:実際には、第2の呼び出し方法の場合、springはgetBooksByUsernameAndLanguage方法を実行する前にキャッシュに行って該当するデータがあるかどうかを確認します.あったら、方法を実行しません.いいえ、実行します.