1概要

この短いチュートリアルでは、Springを使用してキャッシュ追い出しを実行する方法を学習します。これを実証するための小さな例を作成します。

先に進む前に、Springのキャッシングがどのように機能するかを理解するために、https://www.baeldung.com/spring-cache-tutorial[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

を実装してSpring式言語またはカスタムキージェネレータを使用して、目的の引数またはネストされたプロパティを選択できます。


2.2.

CacheManager


を使用する

次に、Spring Cacheモジュールが提供する

CacheManager

を使用してキャッシュを削除する方法を見てみましょう。まず、実装された

CacheManager

Beanを自動配線する必要があります。

そして、必要に応じてキャッシュをクリアすることができます。

@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など、さまざまなキャッシュ実装のすべてで動作することです。

いつものように、このチュートリアルで言及されている例はすべてhttps://github.com/eugenp/tutorials/tree/master/spring-boot-mvc[Githubでの使用]にあります。