SpringBootキャッシングアノテーションの概要


この記事では、Springキャッシュを使用するときに適用されるいくつかのアノテーションと対応する属性を紹介し、それに関連する関数をより詳細に紹介します。

1. @ EnableCachingアノテーション

@EnableCachingはSpringフレームワークによって提供され、SpringBoot鉱山建設はこのアノテーションを継承します。エコノミーとアノテーションキャッシングのサポートを有効にするには、このアノテーションをクラスで構成する必要があります(通常はSpringBootスタートアップクラスで構成されます)。

@EnableCaching //SpringBoot开启缓存注解支持
@SpringBootApplication
public class DemoApplication {
    
    

    public static void main(String[] args) {
    
    
        ConfigurableApplicationContext app = SpringApplication.run(DemoApplication.class, args);
}

2. @ Cacheableアノテーション

@CacheableアノテーションもSpringフレームワークによって提供され、クラスまたはメソッド(通常はデータクエリメソッドで使用)で使用でき、相手の結果はキャッシュされて保存されます。@Cacheableアノテーションの実行順序は、高度なキャッシュクエリです。空の場合、メソッドクエリが実行され、結果がキャッシュされます。キャッシュにデータがある場合、メソッドクエリは実行されませんが、キャッシュされたデータが直接使用されます。

@Cacheableアノテーション関連の属性

  1. value / cacheNames:属性に一致するキャッシュスペースの名前を指定します。使用するものを1つ選択できます。
  2. key:キャッシュ内のデータのキーを指定します。デフォルトではメソッドパラメータ値が使用され、SPEL式も使用できます。
  3. keyGenerator:キャッシュされたデータのキージェネレーターを指定し、キー属性の1つを使用します。
  4. cacheManager:キャッシュのマネージャーを指定します
  5. cacheResolver:cacheManager属性で使用できるキャッシュリゾルバーを指定します。
  6. condition:特定の条件下でデータがキャッシュされることを指定します。
  7. ただし、特定の条件下でデータをキャッシュしないように指定します。
  8. sync:非同期キャッシュを使用するかどうかを指定します。デフォルトはfalseです。

3. @ CachePutアノテーション

@CachePutアノテーションはSpringフレームワークによって提供され、クラスまたはメソッド(通常はデータ更新メソッドで使用されます)に適用できます。このアノテーションの機能は、キャッシュされたデータを更新することです。@CachePutアノテーションの実行順序は、最初にメソッドを呼び出してから、メソッドの結果をキャッシュに更新することです。
@CachePutアノテーションは、@ Cacheableアノテーションとまったく同じ複数の属性も提供します。

4. @ CacheEvictアノテーション

@CacheEvictアノテーションはSpringフレームワークによって提供され、クラスまたはメソッド(通常はデータ削除メソッドで使用されます)に適用できます。このアノテーションの機能は、キャッシュされたデータを削除することです。@CacheEvictアノテーションのデフォルトの実行順序は、最初にメソッドを呼び出してから、キャッシュをクリアすることです。
@CacheEvictアノテーションは、@ Cacheableアノテーションの属性と基本的に同じである複数の属性も提供します。さらに、allEntriesとbeforeInvocationの2つの追加の特別な属性も提供します。

  • allEntries_属性:
    allEntries属性は、指定されたキャッシュスペース内のすべてのキャッシュデータをクリアするかどうかを示します。デフォルト値はfalseです(つまり、指定されたキーに対応するキャッシュデータのみがデフォルトで削除されます)。たとえば、@ CacheEvict(cacheNames = "comment" allEntries = true)は、メソッドの実行後にキャッシュスペースコメント内のすべてのデータが削除されることを意味します。
  • beforeInvocation属性:
    beforeInvocation属性は、メソッドが実行される前にキャッシュをクリアするかどうかを示し、デフォルト値はfalseです(つまり、メソッドがデフォルトで実行された後にキャッシュがクリアされます)。たとえば、@ CacheEvict(cacheNames = "comment"、beforeInvocation = true)は、メソッドが実行される前にキャッシュがクリアされることを意味します。
  • @CacheEvictアノテーションのbeforeInvocation属性がtrueに設定されている場合、特定の欠点があることに注意してください。たとえば、データ削除の方法で例外が発生すると、実際のデータは削除されませんが、キャッシュされたデータは事前​​にクリアされます。

5. @ Cachingアノテーション

@Cachingアノテーションは、クラスまたはメソッドに作用できる複雑なルールのデータキャッシュ管理に使用されます。@ Cachingアノテーションには、3つのアノテーション@ Cacheable、@ CachePut、および@CacheEvictに対応するCacheable、put、およびevictの3つの属性が含まれます。 、それぞれ。、サンプルコードは次のとおりです。

	@Caching(cacheable={
    
    8cacheable (gacheNames ="comment".,key = "帮id")},
	put = {
    
    RCachePut(cacheNames = "comment".,key.= "#result.author")})
	public Comment getcoiment(int comment id){
    
    
		return commentRepository.fi.ndByld(comment id).get(); 
	}

上記のコードでは、getComment)メソッドは@Cachingアノテーションを使用し、cacheableを使用して2つの属性をネストし、@ Cacheableと@CachePutの2つのアノテーションを導入します。キャッシュキー値はidとauthorで、クエリ結果はCommentです。キャッシュ管理のキャッシュ値として。

6. @ CacheConfigアノテーション。

@ CacheConfig…アノテーションはクラスで使用され、主に@ Cacheable、@ CachePut…、および@CacheEvictアノテーションを使用してクラス内のすべてのパブリック属性を管理するために使用されます。これらのパブリック属性には、cacheNames、keyGenerator、cacheManager、cacheResolver、次のサンプルコードが含まれます。

	@CaaheConfig.(caaheNames - "comment")service
		public class CommsntService {
    
    
			@Autowired
			private CommentRepository commentRepository;
			public Comment findById(int comment. id){
    
    
			Comment comment = commentRepository.findById(commenc..id).get ();
			return comment; 
		}
	}

上記のコードでは、CommentServiceクラスに@CacheConfigアノテーションが付けられていると同時に、cacheNames。プロパティを使用してキャッシュスペースがコメントに設定されているため、でキャッシュアノテーションを使用するときに対応するcacheNamesプロパティを省略できます。このクラスのすべてのメソッド。
クラスで@CacheConfigが使用されている場合、アノテーションは特定の属性(cacheNamesなど)を定義し、同時にキャッシュアノテーションはこのクラスのメソッドで同じ属性を定義するために使用されることに注意してください。属性値は「近接原理」を使用します。「選択は、メソッドのアノテーションの属性値に基づいています。

おすすめ

転載: blog.csdn.net/weixin_44676935/article/details/109407062