ホームページ > Java > &#&チュートリアル > Spring Boot のハイブリッド キャッシュ戦略: Redisson と Caffeine の統合ガイド

Spring Boot のハイブリッド キャッシュ戦略: Redisson と Caffeine の統合ガイド

Linda Hamilton
リリース: 2025-01-26 04:04:12
オリジナル
237 人が閲覧しました

効率的なキャッシュ戦略: Spring Boot アプリケーションのハイブリッド キャッシュ

現代のアプリケーション開発では、パフォーマンスとスケーラビリティがシステムの成功または失敗を決定する重要な要素です。キャッシュは、データベースの負荷を軽減し、待ち時間を短縮し、シームレスなユーザー エクスペリエンスを確保することで、これらを改善する上で重要な役割を果たします。ただし、すべてのシナリオに完璧な単一のキャッシュ ソリューションはありません。

ローカル キャッシュ (Caffeine など) はメモリ内でアプリケーションの近くで実行されるため、非常に高速です。これらは、頻繁にアクセスされるデータの応答時間を短縮するのに最適です。一方、分散キャッシュ (Redisson の Redisson など) は、アプリケーションの複数のインスタンスにわたってスケーラビリティと一貫性を提供します。分散キャッシュにより、分散システム内のすべてのノードが同じ最新データにアクセスできるようになります。これはマルチノード環境では重要です。 ただし、ローカルまたは分散キャッシュのみに依存すると、次のような課題が生じる可能性があります。

分散環境ではデータ更新がノード間で同期していないため、

    ローカル キャッシュ
  • が不整合になる可能性があります。
  • 分散キャッシュ
  • では、わずかなネットワーク遅延が発生するため、超低遅延シナリオには適さない可能性があります。
  • ここで、
ハイブリッド キャッシング

が効果的なソリューションになります。 CaffeineRedisson を使用してローカル キャッシュと分散キャッシュの利点を組み合わせることで、分散キャッシュの一貫性とスケーラビリティを維持しながら、ローカル キャッシュ速度の高いパフォーマンスを得ることができます。 この記事では、Spring Boot アプリケーションにハイブリッド キャッシュを実装して、最適なパフォーマンスとデータの一貫性を確保する方法について説明します。

Hybrid Cache Strategy in Spring Boot: A Guide to Redisson and Caffeine Integration実装手順

ステップ 1: 依存関係を追加する

まず、必要な依存関係を

ファイルに追加します。

pom.xml

ステップ 2: キャッシュを構成する
<code class="language-xml"><dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.43.0</version>
</dependency></code>
ログイン後にコピー
ログイン後にコピー

キャッシュ構成は次のとおりです:

主要コンポーネントの詳細な説明
<code class="language-java">@Configuration
@EnableCaching
public class CacheConfig implements CachingConfigurer {

    @Value("${cache.server.address}")
    private String cacheAddress;

    @Value("${cache.server.password}")
    private String cachePassword;

    @Value("${cache.server.expirationTime:60}")
    private Long cacheExpirationTime;

    @Bean(destroyMethod = "shutdown")
    RedissonClient redisson() {
        Config config = new Config();
        config.useSingleServer().setAddress(cacheAddress).setPassword(cachePassword.trim());
        config.setLazyInitialization(true);
        return Redisson.create(config);
    }

    @Bean
    @Override
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(cacheExpirationTime, TimeUnit.MINUTES));
        return cacheManager;
    }

    @Bean
    public CacheEntryRemovedListener cacheEntryRemovedListener() {
        return new CacheEntryRemovedListener(cacheManager());
    }

    @Bean
    @Override
    public CacheResolver cacheResolver() {
        return new LocalCacheResolver(cacheManager(), redisson(), cacheEntryRemovedListener());
    }
}</code>
ログイン後にコピー
ログイン後にコピー

1. キャッシュマネージャー (CacheManager)

は、キャッシュのライフサイクルを管理し、適切なキャッシュ実装 (ローカルまたは分散など) へのアクセスを提供する責任を負います。この例では、

を使用してメモリ内キャッシュを有効にし、CacheManager 経由で有効期限ポリシーを構成します。 CaffeineCacheManager Caffeine2. キャッシュリゾルバー

特定の操作にどのキャッシュを使用するかを動的に決定します。ここで、

はローカル (Caffeine) キャッシュと分散 (Redisson) キャッシュを接続して、ハイブリッド戦略が効果的に適用されるようにします。 CacheResolver LocalCacheResolver

<code class="language-java">@Component
public class LocalCacheResolver implements CacheResolver {
    // ... (代码与原文相同) ...
}</code>
ログイン後にコピー
ログイン後にコピー
3. キャッシュ エントリ削除リスナー (CacheEntryRemovedListener)
<code class="language-java">public class LocalCache implements Cache {
    // ... (代码与原文相同) ...
}</code>
ログイン後にコピー
ログイン後にコピー

分散キャッシュ (Redis) から削除されるエントリをリッスンし、各ノードのローカル キャッシュからもエントリが削除されるようにして、一貫性を維持します。

<code class="language-xml"><dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
    <groupId>com.github.ben-manes.caffeine</groupId>
    <artifactId>caffeine</artifactId>
    <version>3.2.0</version>
</dependency>
<dependency>
    <groupId>org.redisson</groupId>
    <artifactId>redisson</artifactId>
    <version>3.43.0</version>
</dependency></code>
ログイン後にコピー
ログイン後にコピー

ハイブリッドキャッシュワークフロー

キャッシュ記事は

を追加します

アノテーションメソッドが実行されると、@Cacheableメソッドが呼び出されます。これにより、データはローカルキャッシュと分散キャッシュ(REDIS)に保存されます:put

<code class="language-java">@Configuration
@EnableCaching
public class CacheConfig implements CachingConfigurer {

    @Value("${cache.server.address}")
    private String cacheAddress;

    @Value("${cache.server.password}")
    private String cachePassword;

    @Value("${cache.server.expirationTime:60}")
    private Long cacheExpirationTime;

    @Bean(destroyMethod = "shutdown")
    RedissonClient redisson() {
        Config config = new Config();
        config.useSingleServer().setAddress(cacheAddress).setPassword(cachePassword.trim());
        config.setLazyInitialization(true);
        return Redisson.create(config);
    }

    @Bean
    @Override
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder().expireAfterWrite(cacheExpirationTime, TimeUnit.MINUTES));
        return cacheManager;
    }

    @Bean
    public CacheEntryRemovedListener cacheEntryRemovedListener() {
        return new CacheEntryRemovedListener(cacheManager());
    }

    @Bean
    @Override
    public CacheResolver cacheResolver() {
        return new LocalCacheResolver(cacheManager(), redisson(), cacheEntryRemovedListener());
    }
}</code>
ログイン後にコピー
ログイン後にコピー
記事の取得

キャッシュ

データを取得するには、システムが最初にキーがローカルキャッシュに存在するかどうかを確認します。キーが見つからない場合は、分散キャッシュをクエリします。この値が分散キャッシュに存在している場合は、ローカルキャッシュに追加して、フォローアップ訪問をより速くします:

<code class="language-java">@Component
public class LocalCacheResolver implements CacheResolver {
    // ... (代码与原文相同) ...
}</code>
ログイン後にコピー
ログイン後にコピー
キャッシュバーが排出されます

キャッシュが排出されると(例:

注釈を介して)、キーは分散キャッシュから削除されます。他のノードのローカルキャッシュには、同じキーを削除するために通知されます。 @CacheEvict CacheEntryRemovedListener

要約
<code class="language-java">public class LocalCache implements Cache {
    // ... (代码与原文相同) ...
}</code>
ログイン後にコピー
ログイン後にコピー
混合キャッシュは、ローカルメモリキャッシュの速度と、分散キャッシュのスケーラビリティと一貫性を組み合わせます。この方法は、ローカルまたは分布のキャッシュのみの制限を解決します。 Spring Bootアプリケーションで
Caffeine およびを統合することにより、大幅なパフォーマンス改善を達成し、アプリケーションノード間のデータの一貫性を確保することができます。

を使用すると、およびは、すべてのキャッシュレイヤー間でAltoscopicストリップが同期され、最新のスケーラブルなアプリケーションに効率的で信頼性の高いキャッシュ戦略を提供することを確認できます。これらのシステムでは、パフォーマンスと一貫性が非常に重要であるため、このハイブリッド方法は分散システムで特に価値があります。

以上がSpring Boot のハイブリッド キャッシュ戦略: Redisson と Caffeine の統合ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート