Redis注記の使用方法


この記事では、Springキャッシュ注記@Cacheable,@CachePut,@CacheEveictの詳細について説明します.
コメントの紹介
  • @Cacheable
  • @Cacheableの役割は主にメソッドに対して構成され、メソッドの要求パラメータに基づいてその結果をキャッシュすることができる
  • .
  • @Cacheableの役割と構成方法
  •  
    パラメータ
    説明する
    example
    value
    キャッシュの名前springプロファイルで定義するには、少なくとも1つを指定する必要があります.
    例:@Cacheable(value="mycache")@Cacheable(value={"cache 1","cache 2"}
    key
    キャッシュされたkeyは、空にすることができます.SpEL式で記述するように指定した場合、指定しない場合は、デフォルトでメソッドのすべてのパラメータで組み合わせられます.
    @Cacheable(value=”testcache”,key=”#userName”)
    condition
    キャッシュの条件は、空であってもよく、SpELで記述し、trueまたはfalseを返し、trueのみがキャッシュを行う
    @Cacheable(value=”testcache”,condition=”#userName.length()>2”)
     
    ≪インスタンス|Instance|emdw≫
        //@Cacheable(value=”accountCache”),        ,          ,       accountCache       ,    ,        (      ),
        //            ,          。        key      userName,value    Account   。“accountCache”     spring*.xml       。
        @Cacheable(value="accountCache")
        public Account getAccountByName(String userName) {
            //              ,      
            System.out.println("real query account."+userName);
            return getFromDB(userName);
        }

    @CachePut
  • @CachePutの役割は主にメソッド構成であり、メソッドの要求パラメータに基づいてその結果をキャッシュすることができ、@Cacheableとは異なり、そのたびに実際のメソッドの呼び出し
  • がトリガーされる.
  • @CachePutの作用と配置方法
  •  
    パラメータ
    説明する
    example
    value
    キャッシュの名前springプロファイルで定義するには、少なくとも1つを指定する必要があります.
    @CachePut(value=”my cache”)
    key
    キャッシュされたkeyは、空にすることができます.SpEL式で記述するように指定した場合、指定しない場合は、デフォルトでメソッドのすべてのパラメータで組み合わせられます.
    @CachePut(value=”testcache”,key=”#userName”)
    condition
    キャッシュの条件は、空であってもよく、SpELで記述し、trueまたはfalseを返し、trueのみがキャッシュを行う
    @CachePut(value=”testcache”,condition=”#userName.length()>2”)
     
    ≪インスタンス|Instance|emdw≫
    //@CachePut   ,             ,                ,             。
    
    @CachePut(value="accountCache",key="#account.getName()")//   accountCache   
    public Account updateAccount(Account account) { 
      return updateDB(account); 
    } 

    @CacheEvict
  • @CachEveictの役割は主に方法に対して配置され、一定の条件に基づいてキャッシュをクリアすることができる
  • .
  • @CacheEveictの役割と構成方法
  •  
    パラメータ
    説明する
    example
    value
    キャッシュの名前springプロファイルで定義するには、少なくとも1つを指定する必要があります.
    @CacheEvict(value=”my cache”)
    key
    キャッシュされたkeyは、空にすることができます.SpEL式で記述するように指定した場合、指定しない場合は、デフォルトでメソッドのすべてのパラメータで組み合わせられます.
    @CacheEvict(value=”testcache”,key=”#userName”)
    condition
    キャッシュの条件は、空であってもよく、SpELで記述し、trueまたはfalseを返し、trueのみがキャッシュを行う
    @CacheEvict(value=”testcache”,condition=”#userName.length()>2”)
    allEntries
    すべてのキャッシュ内容を空にするかどうか、デフォルトはfalseで、trueとして指定すると、メソッド呼び出し後すぐにすべてのキャッシュが空になります.
    @CachEvict(value=”testcache”,allEntries=true)
    beforeInvocation
    メソッドの実行前にクリアするかどうか、デフォルトはfalse、trueとして指定すると、メソッドがまだ実行されていないときにキャッシュがクリアされます.デフォルトでは、メソッドが例外を放出すると、キャッシュはクリアされません.
    @CachEvict(value=”testcache”,beforeInvocation=true)
     
    ≪インスタンス|Instance|emdw≫
    //@CacheEvict(value="accountCache",key="#account.getName()")//   accountCache    
    public void updateAccount(Account account) {
       updateDB(account); 
    } 
    
    //@CacheEvict(value="accountCache",allEntries=true)//   accountCache   
    public void reload() {
       reloadAll()
    }
    
    //@Cacheable(value="accountCache",condition="#userName.length() <=4")//      accountCache 
    public Account getAccountByName(String userName) { 
     //              ,      
     return getFromDB(userName); 
    }

    @CacheConfig
    すべての@Cacheable()にはvalue=「xxx」のプロパティがあります.これは明らかに方法が多く、書くのも疲れています.一度に宣言すれば手間が省けます.したがって、@CacheConfigという構成があれば、1つのクラスに複数のキャッシュ操作がある可能性がありますが、これらのキャッシュ操作は重複している可能性があります.このとき@CacheConfigが使えます.
    @CacheConfig("books")
    public class BookRepositoryImpl implements BookRepository {
    
      @Cacheable
      public Book findBook(ISBN isbn) {...}
    }

    条件付きキャッシュ
    次に、一般的な条件キャッシュを示します.
    //@Cacheable        ( #result       )  condition,    true,    ; 
    @Cacheable(value = "user", key = "#id", condition = "#id lt 10")
    public User conditionFindById(final Long id) 
    
    //@CachePut        (#result        )  condition,    true,     ; 
    @CachePut(value = "user", key = "#id", condition = "#result.username ne 'zhang'") 
    public User conditionSave(final User user)  
    
    //@CachePut        (#result        )  unless,    false,     ;(  condition  )
    @CachePut(value = "user", key = "#user.id", unless = "#result.username eq 'zhang'")
    public User conditionSave2(final User user)  
    
    //@CacheEvict, beforeInvocation=false           (#result       );   condition,    true,     ;
    @CacheEvict(value = "user", key = "#user.id", beforeInvocation = false, condition = "#result.username ne 'zhang'") 
    public User conditionDelete(final User user) 

    @Caching
    複数のCache注釈を組み合わせて使用する場合があります.例えば、ユーザーの新規作成に成功したら、id->userを追加します.username—>user;Email—>userのキャッシュ;このとき@Cachingで複数の注記ラベルを組み合わせる必要があります.
    @Caching(put = {
    @CachePut(value = "user", key = "#user.id"),
    @CachePut(value = "user", key = "#user.username"),
    @CachePut(value = "user", key = "#user.email")
    })
    public User save(User user) {
    
    }

     
    SpELコンテキストデータ
    Spring Cacheは、SpELコンテキストデータをいくつか提供しています.次の表はSpringの公式ドキュメントから直接抜粋しています.
     
    名前
    位置
    説明

    methodName
    rootオブジェクト
    現在呼び出されているメソッド名
    root.methodName
    method
    rootオブジェクト
    現在呼び出されているメソッド
    root.method.name
    target
    rootオブジェクト
    現在呼び出されているターゲットオブジェクト
    root.target
    targetClass
    rootオブジェクト
    現在呼び出されているターゲットオブジェクトクラス
    root.targetClass
    args
    rootオブジェクト
    現在呼び出されているメソッドのパラメータのリスト
    root.args[0]
    caches
    rootオブジェクト
    現在のメソッド呼び出しで使用されているキャッシュリスト(@Cacheable(value={"cache 1","cache 2"})など)には、2つのcacheがあります.
    root.caches[0].name
    argument name
    実行コンテキスト
    現在呼び出されているメソッドのパラメータ、例えばfindById(Long id)は、#idでパラメータを取得できます.
    user.id
    result
    実行コンテキスト
    メソッド実行後の戻り値(メソッド実行後の判断のみ有効、例えば「unless」,「cache evict」のbeforeInvocation=false)
    result
     
    @CacheEvict(value = "user", key = "#user.id", condition = "#root.target.canCache() and #root.caches[0].get(#user.id).get().username ne #user.username", beforeInvocation = true) 
    public void conditionUpdate(User user) 

    以上転載:https://www.jb51.net/article/112849.htm