私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
リードスルー モードは一般に、アプリケーションがデータを読み取ろうとするときに、最初にキャッシュ システムをチェックしてデータがすでにキャッシュ内にあるかどうかを確認するキャッシュ戦略を指します。データがキャッシュに存在する場合 (つまり、キャッシュ ヒット)、データはキャッシュから直接読み取られ、アプリケーションに返されます。データがキャッシュに存在しない場合 (つまり、キャッシュ ミス)、データは基礎となるデータ ストア (データベースなど) から読み取られ、キャッシュにロードされ、最後にアプリケーションに返されます。
このモデルの主な利点は次のとおりです。
リードスルー モードは、通常、遅延読み込みや熱心な読み込みなどの戦略と対比されます。
リード スルー モードを実装する場合は、次の点を考慮する必要があります。
Spring Boot での Read Through パターンの実装は、通常、Spring Cache 抽象化を通じて実現できます。 Spring Cache は、さまざまなキャッシュ実装にわたって統合された API を提供し、EhCache、Hazelcast、Infinispan、Redis などの複数のキャッシュ ソリューションをサポートします。
依存関係の追加: まず、Spring Boot のキャッシュ依存関係と選択したキャッシュ実装ライブラリ (Redis など) を追加する必要があります。
- <!-- Spring Boot Starter Cache -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-cache</artifactId>
- </dependency>
-
- <!-- 以Redis为例,添加Redis的Spring Boot Starter -->
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
キャッシュアノテーションを有効にする:Spring Boot 構成クラスを追加します。@EnableCaching
注釈を使用してキャッシュ注釈サポートを有効にします。
キャッシュマネージャーを構成する: 1 つ以上を設定しますCacheManager
, Spring Boot は簡単な設定を自動的に行います。CacheManager
ただし、必要に応じて、より複雑なキャッシュ戦略を構成できます。
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.data.redis.cache.RedisCacheConfiguration;
- import org.springframework.data.redis.cache.RedisCacheManager;
- import org.springframework.data.redis.connection.RedisConnectionFactory;
-
- @Configuration
- public class RedisCacheConfig {
-
- @Bean
- public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
- RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
- .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(RedisSerializer.string()))
- .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(GenericJackson2JsonRedisSerializer.json())))
-
- Map<String, RedisCacheConfiguration> customCacheConfigs = new HashMap<>();
- customCacheConfigs.put("mySpecialCache",
- config.entryTtl(Duration.ofMinutes(15))); // 为特定缓存设置不同的过期时间
-
- .disableCachingNullValues();
- return RedisCacheManager.builder(connectionFactory)
- .cacheDefaults(config)
- // 在这里可以自定义添加缓存配置
- .withInitialCacheConfigurations(customCacheConfigs)
- .build();
- }
- }
@Cacheable
リードスルーモードを実装するためのアノテーション。キャッシュにデータがない場合は、メソッドが呼び出され、結果がキャッシュされます。 - import org.springframework.cache.annotation.Cacheable;
- import org.springframework.stereotype.Service;
-
- @Service
- public class MyService {
-
- @Cacheable(value = "myCache", key = "#id")
- public MyData getDataById(String id) {
- // 从数据库加载数据
- return myDataRepository.findById(id);
- }
- }
キャッシュキー:存在する@Cacheable
キャッシュ キーはアノテーションで指定され、通常はメソッド パラメーターの値に基づきます。
キャッシュ名: 異なるキャッシュ ドメインを区別するために使用されるキャッシュ名を指定します。
キャッシュパラメータを構成する: 必要に応じて、キャッシュのタイムアウト、条件、例外条件などを設定できます。
値またはキャッシュ名 : キャッシュ名を指定します。キャッシュの保存に使用される 1 つ以上のキャッシュ名を指定できます。
@Cacheable(value = "myCacheName", key = "#id")
鍵 : キャッシュ キー値の生成戦略を定義します。通常、SpEL 式 (Spring Expression Language) は、メソッド パラメータをキャッシュ キーとして指定するために使用されます。
@Cacheable(cacheNames = "myCache", key = "#id")
状態: キャッシュの条件を定義し、条件が満たされた場合にのみキャッシュします。
@Cacheable(cacheNames = "myCache", key = "#id", condition = "#id.length() > 3")
ない限り: キャッシュしない条件を定義し、condition
代わりに、特定の状況を除外するために使用されます。
@Cacheable(cacheNames = "myCache", key = "#id", unless = "#result == null")
キージェネレータ: より複雑なキー生成ロジックが必要な場合は、カスタム キャッシュ キー生成戦略を指定できます。KeyGenerator
豆の名前。
@Cacheable(cacheNames = "myCache", keyGenerator = "myKeyGenerator")
キャッシュマネージャー:どちらを使用するかを指定しますCacheManager
、複数ある場合CacheManager
使用した場合。
@Cacheable(cacheNames = "myCache", cacheManager = "myCacheManager")
書き込み後に期限切れ : キャッシュ項目が書き込まれた後の有効期限をミリ秒単位で設定します。これは、キャッシュされたデータの有効期間を定義するために一般的に使用される構成です。
@Cacheable(cacheNames = "myCache", key = "#id", expireAfterWrite = 3600000) // 1小时后过期
有効期限後アクセス: キャッシュ アイテムの最終アクセス後の有効期限を設定します。これは、最後のアクセスからキャッシュされたデータの有効期限が切れるまでの時間に適用されます。
リフレッシュ後書き込み: キャッシュが動的に更新されるシナリオに適した、書き込み後にキャッシュを更新する時間を設定します。
同期: 同時環境での競合状態を防ぐためにキャッシュ項目を同期的に作成するかどうかを設定します。
例外処理注: アプリケーションの安定性に影響を与えないように、キャッシュ メソッドでスローされる可能性のある例外を必ず処理してください。