1. 概要

この短いチュートリアルでは、 Springを使用してキャッシュエビクションを実行する方法。 これを示すために、小さな例を作成します。

先に進む前に、私たちの記事– Springでのキャッシングガイド–をチェックして、Springキャッシングがどのように機能するかを理解してください。

2. キャッシュを削除する方法は?

Springは、メソッドで @CacheEvict アノテーションを使用するか、 CacheManger を自動配線し、 clear()を呼び出してキャッシュをクリアすることにより、キャッシュを削除する2つの方法を提供します。 メソッド。

これらの2つのキャッシュ排除メカニズムをコードで実装する方法は次のとおりです。

2.1. @CacheEvictを使用する

@CacheEvict アノテーションを使用して空のメソッドを作成し、アノテーションの引数としてクリアするキャッシュ名を指定しましょう(この場合、「first」という名前でキャッシュをクリアします)。

@CacheEvict(value = "first", allEntries = true)
public void evictAllCacheValues() {}

Springは、@ CacheEvictで注釈が付けられたすべてのメソッドをインターセプトし、allEntriesフラグに基づいてすべての値をクリアします。 特定のキーに基づいて値を削除することができます。

このために必要なのは、 allEntries フラグの代わりに、引数としてキャッシュキーを渡すことだけです。

@CacheEvict(value = "first", key = "#cacheKey")
public void evictSingleCacheValue(String cacheKey) {}

key 属性の値は動的であるため、 KeyGenerator を実装して目的の引数またはネストされたプロパティを選択することにより、SpringExpressionLanguageまたはカスタムキージェネレーターを使用できます。

2.2. CacheManagerを使用する

次に、Springキャッシュモジュールによって提供されるCacheManagerを使用してキャッシュを削除する方法を見てみましょう。 まず、実装されたCacheManagerBeanを自動配線する必要があります。

そして、ニーズに基づいてキャッシュをクリアできます。

@Autowired
CacheManager cacheManager;

public void evictSingleCacheValue(String cacheName, String cacheKey) {
    cacheManager.getCache(cacheName).evict(cacheKey);
}

public void evictAllCacheValues(String cacheName) {
    cacheManager.getCache(cacheName).clear();
}

コードからわかるように、 clear()メソッドはすべてのキャッシュエントリをクリアし、evict()メソッドはキーに基づいて値をクリアします。

3. すべてのキャッシュを削除する方法は?

Springは、すべてのキャッシュをクリアするためのすぐに使用できる機能を提供していません。 ただし、これは、キャッシュマネージャーの getCacheNames()メソッドを使用することで簡単に実現できます。

3.1. 必要に応じて立ち退き

次に、オンデマンドですべてのキャッシュをクリアする方法を見てみましょう。 トリガーポイントを作成するには、最初にエンドポイントを公開する必要があります。

@RestController
public class CachingController {
	
    @Autowired
    CachingService cachingService;
	
    @GetMapping("clearAllCaches")
    public void clearAllCaches() {
        cachingService.evictAllCaches();
    }
}

CachingService では、キャッシュマネージャーから取得したキャッシュ名を反復処理することにより、すべてのキャッシュをクリアできます。

public void evictAllCaches() {
    cacheManager.getCacheNames().stream()
      .forEach(cacheName -> cacheManager.getCache(cacheName).clear());
}

3.2. 自動エビクション

キャッシュの削除を特定の間隔で自動的に実行する必要がある特定のユースケースがあります。 この場合、はSpringのタスクスケジューラを利用できます。

@Scheduled(fixedRate = 6000)
public void evictAllcachesAtIntervals() {
    evictAllCaches();
}

4. 結論

さまざまな方法でキャッシュを削除する方法を学びました。 これらのメカニズムについて注目に値することの1つは、eh-cache、infini-span、apache-igniteなどのさまざまなキャッシュ実装のすべてで機能することです。

いつものように、このチュートリアルで言及されているすべての例は、Githubにあります。