Spring Boot のキャッシュによるバックエンドのパフォーマンスの向上

Barbara Streisand
リリース: 2024-11-15 17:11:02
オリジナル
247 人が閲覧しました

Improving Backend Performance with Caching in Spring Boot

今日の世界では、アプリケーションのパフォーマンスが非常に重要です。ユーザーは、特に遅延がユーザー エクスペリエンスを左右する高トラフィックのアプリケーションでは、素早い応答時間を期待しています。キャッシュは、特に反復的または高価なデータ取得操作を扱う場合に、バックエンドのパフォーマンスを向上させる最も効果的な方法の 1 つです。この投稿では、Spring Boot を使用したキャッシュについて詳しく説明し、アプリケーションの速度を向上させるためのさまざまなキャッシュ戦略と実装のヒントについて説明します。

キャッシングを行う理由

キャッシュを使用すると、アプリケーションはデータを一時的に保存できるため、データベースや外部サービスから頻繁にアクセスされるデータを取得するのに必要な時間を短縮できます。キャッシュはデータベースへの直接アクセスを減らすことで、サーバーの負荷を軽減し、ネットワークの使用を最適化し、そして最も重要なことに、応答時間を短縮します。

キャッシュの一般的な使用例は次のとおりです。

  • 静的データまたはほとんど変更されないデータを繰り返しフェッチします。
  • 複雑で高コストの計算の結果を処理します。
  • ユーザーセッションまたは認証トークンを保存します。
  • Spring Boot でのキャッシュのセットアップ

Spring Boot では、@EnableCaching アノテーションを活用し、キャッシュ管理の単純な抽象化を提供することで、アプリケーションにキャッシュを簡単に追加できます。

ステップ 1: Spring Boot アプリケーションでキャッシュを有効にする

まず、メイン アプリケーション クラスに @EnableCaching を追加してキャッシュを有効にします。

@SpringBootApplication
@EnableCaching
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
ログイン後にコピー
ログイン後にコピー

これにより、Spring のキャッシュ インフラストラクチャが有効になり、キャッシュ エントリを管理するメソッドのキャッシュ アノテーションが検索されます。

ステップ 2: キャッシュ プロバイダーの追加

Spring Boot は、次のようなさまざまなキャッシュ プロバイダーを提供します。

ConcurrentHashMap (デフォルト): 単純なアプリケーションまたはローカル キャッシュに適しています。
Ehcache: Java アプリケーションを強力にサポートする一般的なメモリ内キャッシュ。
Redis: ネットワーク化されたメモリ内データ構造機能により、分散アプリケーションに最適です。
Hazelcast、Caffeine、Memcached など
ここではキャッシュプロバイダーとして Redis を使用しましょう。 Redis の依存関係を pom.xml に追加します:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
ログイン後にコピー
ログイン後にコピー

application.properties ファイルで、Redis サーバー接続を構成します。

spring.cache.type=redis
spring.redis.host=localhost
spring.redis.port=6379
ログイン後にコピー
ログイン後にコピー

注: ローカル マシンで Redis が実行されているか、クラウド Redis サービスに接続していることを確認してください。

ステップ 3: キャッシュ注釈の適用

キャッシュを有効にし、プロバイダーを構成すると、キャッシュの利点を活用するメソッドにキャッシュ アノテーションの適用を開始できます。最も一般的に使用されるアノテーションは @Cacheable.

です。

@Cacheable の例

メソッドで @Cacheable を使用して、結果をキャッシュに保存します。ユーザー データを取得するサービスを使用する例を次に示します:

@SpringBootApplication
@EnableCaching
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
ログイン後にコピー
ログイン後にコピー

この例では、getUserById メソッドがキャッシュされ、ユーザー オブジェクトが userId ごとに「users」キャッシュに保存されます。同じ userId を使用した後続の呼び出しでは、simulatorSlowService() 遅延をバイパスして、キャッシュされた値が返されます。

@CachePut と @CacheEvict の使用

@CachePut: メソッドの実行をスキップせずにキャッシュを更新します。
@CacheEvict: キャッシュからエントリを削除します。キャッシュされたデータを最新の状態に保つのに役立ちます。
たとえば、ユーザーを更新または削除する場合は @CacheEvict を使用します:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
ログイン後にコピー
ログイン後にコピー

キャッシュ戦略
キャッシュを最大限に活用するには、適切なキャッシュ戦略を選択することが重要です。考慮すべきいくつかのアプローチを次に示します。

1. 存続時間 (TTL) キャッシュ

設定された期間後に自動的に期限切れになるようにキャッシュ エントリの TTL を構成します。これにより、古いデータがキャッシュに残ることがなくなり、頻繁に更新されるデータに特に役立ちます。

Redis では、構成で次のように TTL を設定できます:

spring.cache.type=redis
spring.redis.host=localhost
spring.redis.port=6379
ログイン後にコピー
ログイン後にコピー

2. キャッシュアサイドパターン

このパターンでは、アプリケーションはデータベースからデータを取得する前にキャッシュをチェックします。データがキャッシュ内に見つからない場合 (「キャッシュミス」)、データベースからフェッチし、結果をキャッシュして返します。これは一般的なアプローチであり、@Cacheable を使用して簡単に実装できます。

3. ライトスルーおよびライトビハインド キャッシュ

ライトスルー: キャッシュはデータベースと同時に更新されます。
ライトビハインド: キャッシュはすぐに更新されますが、データベースは後でバッチで更新されます。
これらのアプローチは、キャ​​ッシュとデータベースの間でデータの一貫性が必要な場合に役立ちます。

キャッシュパフォーマンスの監視

キャッシュのパフォーマンスを監視して、期待されるメリットが得られていることを確認することが重要です。キャッシュのヒット、ミス、エビクションを追跡して、ボトルネックを特定できます。監視用の一般的なツールには次のものがあります。

  1. Redis CLI: Redis キャッシュのヒット/ミスをリアルタイムで監視します。
  2. Spring Boot Actuator: 監視と管理のためにキャッシュ メトリクスを公開します。
  3. Prometheus と Grafana: Redis と Spring Boot メトリクスを追跡して視覚化します。

避けるべき一般的なキャッシュの落とし穴

  1. 多すぎるデータのキャッシュ: 過度に大規模なデータをキャッシュすると、メモリ使用量が高くなり、パフォーマンスの向上が無効になる可能性があります。
  2. アクセス頻度が低い: アクセス頻度の低いデータをキャッシュしても、取得時間が大幅に短縮されないため、価値がない可能性があります。
  3. 古いデータの問題: データが頻繁に変更される場合は、古い情報が提供されないように TTL を設定します。

キャッシュはバックエンドのパフォーマンスを向上させるための強力なツールであり、Spring Boot を使用すると実装が簡単になります。 @Cacheable、@CacheEvict などのキャッシュ アノテーションを活用し、適切なキャッシュ戦略を使用することで、応答時間を大幅に短縮し、サーバーの負荷を軽減し、全体的なユーザー エクスペリエンスを向上させることができます。 Redis、Ehcache、またはその他のキャッシュ プロバイダーを使用しているかどうかに関係なく、キャッシュは高性能アプリケーションへの貴重な追加機能です。

Spring Boot アプリケーションでキャッシュの実験を開始し、パフォーマンスが向上するのを確認してください。

以上がSpring Boot のキャッシュによるバックエンドのパフォーマンスの向上の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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