今日の世界では、アプリケーションのパフォーマンスが非常に重要です。ユーザーは、特に遅延がユーザー エクスペリエンスを左右する高トラフィックのアプリケーションでは、素早い応答時間を期待しています。キャッシュは、特に反復的または高価なデータ取得操作を扱う場合に、バックエンドのパフォーマンスを向上させる最も効果的な方法の 1 つです。この投稿では、Spring Boot を使用したキャッシュについて詳しく説明し、アプリケーションの速度を向上させるためのさまざまなキャッシュ戦略と実装のヒントについて説明します。
キャッシュを使用すると、アプリケーションはデータを一時的に保存できるため、データベースや外部サービスから頻繁にアクセスされるデータを取得するのに必要な時間を短縮できます。キャッシュはデータベースへの直接アクセスを減らすことで、サーバーの負荷を軽減し、ネットワークの使用を最適化し、そして最も重要なことに、応答時間を短縮します。
Spring Boot では、@EnableCaching アノテーションを活用し、キャッシュ管理の単純な抽象化を提供することで、アプリケーションにキャッシュを簡単に追加できます。
まず、メイン アプリケーション クラスに @EnableCaching を追加してキャッシュを有効にします。
@SpringBootApplication @EnableCaching public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
これにより、Spring のキャッシュ インフラストラクチャが有効になり、キャッシュ エントリを管理するメソッドのキャッシュ アノテーションが検索されます。
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 サービスに接続していることを確認してください。
キャッシュを有効にし、プロバイダーを構成すると、キャッシュの利点を活用するメソッドにキャッシュ アノテーションの適用を開始できます。最も一般的に使用されるアノテーションは @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>
キャッシュ戦略
キャッシュを最大限に活用するには、適切なキャッシュ戦略を選択することが重要です。考慮すべきいくつかのアプローチを次に示します。
設定された期間後に自動的に期限切れになるようにキャッシュ エントリの TTL を構成します。これにより、古いデータがキャッシュに残ることがなくなり、頻繁に更新されるデータに特に役立ちます。
Redis では、構成で次のように TTL を設定できます:
spring.cache.type=redis spring.redis.host=localhost spring.redis.port=6379
このパターンでは、アプリケーションはデータベースからデータを取得する前にキャッシュをチェックします。データがキャッシュ内に見つからない場合 (「キャッシュミス」)、データベースからフェッチし、結果をキャッシュして返します。これは一般的なアプローチであり、@Cacheable を使用して簡単に実装できます。
ライトスルー: キャッシュはデータベースと同時に更新されます。
ライトビハインド: キャッシュはすぐに更新されますが、データベースは後でバッチで更新されます。
これらのアプローチは、キャッシュとデータベースの間でデータの一貫性が必要な場合に役立ちます。
キャッシュのパフォーマンスを監視して、期待されるメリットが得られていることを確認することが重要です。キャッシュのヒット、ミス、エビクションを追跡して、ボトルネックを特定できます。監視用の一般的なツールには次のものがあります。
キャッシュはバックエンドのパフォーマンスを向上させるための強力なツールであり、Spring Boot を使用すると実装が簡単になります。 @Cacheable、@CacheEvict などのキャッシュ アノテーションを活用し、適切なキャッシュ戦略を使用することで、応答時間を大幅に短縮し、サーバーの負荷を軽減し、全体的なユーザー エクスペリエンスを向上させることができます。 Redis、Ehcache、またはその他のキャッシュ プロバイダーを使用しているかどうかに関係なく、キャッシュは高性能アプリケーションへの貴重な追加機能です。
Spring Boot アプリケーションでキャッシュの実験を開始し、パフォーマンスが向上するのを確認してください。
以上がSpring Boot のキャッシュによるバックエンドのパフォーマンスの向上の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。