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≫
@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≫
@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≫
@CacheConfig
すべての@Cacheable()にはvalue=「xxx」のプロパティがあります.これは明らかに方法が多く、書くのも疲れています.一度に宣言すれば手間が省けます.したがって、@CacheConfigという構成があれば、1つのクラスに複数のキャッシュ操作がある可能性がありますが、これらのキャッシュ操作は重複している可能性があります.このとき@CacheConfigが使えます.
条件付きキャッシュ
次に、一般的な条件キャッシュを示します.
@Caching
複数のCache注釈を組み合わせて使用する場合があります.例えば、ユーザーの新規作成に成功したら、id->userを追加します.username—>user;Email—>userのキャッシュ;このとき@Cachingで複数の注記ラベルを組み合わせる必要があります.
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
以上転載:https://www.jb51.net/article/112849.htm
コメントの紹介
パラメータ
説明する
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
パラメータ
説明する
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
パラメータ
説明する
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