1はじめに
先ほど、読み取りモードと書き込みモードに関するいくつかの概念、およびキャッシュコヒーレンシのソリューションについて説明しました。
今回は、以前の固有の操作を単純化することに相当するスプリングキャッシュについて説明しました。これは、キャッシュの抽象化として理解できます。これは、スプリング統合コンポーネントの一部です。
彼と一緒にいると、キャッシュを使用するのがはるかに簡単になります。以前の操作の多くはコメント付きで行われることがよくあります。公式の学習リンクは次のとおりです。
https://docs.spring.io/spring-framework/docs/5.2.13.RELEASE/spring-framework-reference/
2.詳細
アプリケーションはspringcacheを使用する必要があり、アプリケーションには1つ以上のキャッシュマネージャーが装備されている必要があり、キャッシュマネージャーにはさまざまなキャッシュコンポーネントがあります。キャッシュの実際の追加、削除、および変更は、これらのキャッシュコンポーネントによって異なります。
これらのキャッシュは、次の図に示すように、名前で区別されます。たとえば、従業員キャッシュ、給与キャッシュ、メニューキャッシュ、製品キャッシュ、その他のキャッシュなどに分けられます。
実際、簡単に理解すると、CacheManagerは、マネージャーとして、ストレージがConcurrentMap、redis、mysql、またはmongodbのいずれを使用するかなどのルールを定義するために使用されます。
または、混合ストレージの全体的な有効期限、およびキャッシュコンポーネントが異なる名前で分割されている理由。これは実際にはビジネスに関連しています。たとえば、注文ビジネスと商品ビジネスのキャッシュを定義できます。
次に、追加および削除するときにこのキャッシュに細分化できます。たとえば、注文ビジネスのキャッシュを更新する場合、すべてを更新することが常に適切であるとは限りません。
CacheManagerキャッシュこれらの2つの親インターフェースをクリックすると、使用可能なメソッドを確認できます。
3.SpringCacheと初期エクスペリエンスアノテーションを統合する便利さ
(1)依存関係を導入する
1つ目はspringcacheの依存関係であり、2つ目はキャッシングシーンとして使用したいものを紹介することです。これがredisです。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
(2)構成の書き込み
依存関係を導入した後、最初に自動的に構成されているものを見てみましょう。次に、不足している構成がわかっているので、手動で入力できます。
CacheAutoConfigurationコードを確認したところ、対応するタイプのキャッシュマネージャーが搭載されていることがわかりました。再作成してから、キャッシュスペースを作成します。
(3)キャッシュ機能をオンにする
以下に最初のコメントを追加してください
(4)各アノテーションの使い方
まず、各アノテーションについて簡単に紹介します
4.1 @Cacheable
以前にホームページにアクセスしたときに呼び出される第1レベルの分類をクエリするメソッドに注釈を追加します
ホームページにアクセスして更新しましたが、出力ステートメントが最初に出力されたときにのみ、キャッシュに保存されたことを示しています。後続のメソッド呼び出しは、実際には直接アクセスされたキャッシュです。
キャッシュに実際のアクセス方法がない場合、私を信じていない場合は、キャッシュを削除してみてください。
redisクライアントを開き、このキャッシュを見つけます。彼のキーがデフォルトであり、有効期限-1が期限切れになることはなく、値はjdkシリアル化の結果であることがわかります。これらは、後で自分で定義できます。
4.2さまざまなデフォルト構成を変更する
今すぐ前の文を実装しましょう
@Cacheableのさまざまな属性
次の図は、Cacheableのさまざまな属性を示しています。上記の値のみを設定します。実際、キーまたはキージェネレーター、キャッシュされる条件、キャッシュされない条件なども設定できます。同期されていますか?
4.2.1セットキー
次のように、キーは文字列などのSpEL式であることを忘れないでください。また、2つの一重引用符を追加することを忘れないでください。
http:// SpEL式のリンク キーは、メソッド名などにすることができます
4.2.2有効期限の設定
これは前に述べましたが、自動構成クラスはapplication.properties構成ファイルをロードします
ここでは、有効期限を1時間に設定します
4.3.3互換性の問題を防ぐために、キャッシュの値をjson形式に変更します
ここでは、構成クラスをカスタマイズする必要があります。プロセスについてはあまり説明しません。
RedisCacheConfiguration后 得知,我们自定义配置类,并覆盖redisconfig对象,以及添加自己的配置即可
package com.atguigu.gulimall.product.config;
import com.alibaba.fastjson.support.spring.GenericFastJsonRedisSerializer;
import org.springframework.boot.autoconfigure.cache.CacheProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheConfiguration;
import org.springframework.data.redis.serializer.RedisSerializationContext;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* @author rengang
* @version 1.0
* @date 2021/3/28 15:47
*/
@EnableConfigurationProperties(CacheProperties.class)
@Configuration
@EnableCaching
public class MyCacheConfig {
@Bean
RedisCacheConfiguration redisCacheConfiguration(CacheProperties cacheProperties){
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig();
//键值 缓存类型设置 键采用string 值采用 generic json 也就是支持泛型的json
config.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()));
config.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericFastJsonRedisSerializer()));
CacheProperties.Redis redisProperties = cacheProperties.getRedis();
if (redisProperties.getTimeToLive() != null) {
config = config.entryTtl(redisProperties.getTimeToLive());
}
if (redisProperties.getKeyPrefix() != null) {
config = config.prefixKeysWith(redisProperties.getKeyPrefix());
}
if (!redisProperties.isCacheNullValues()) {
config = config.disableCachingNullValues();
}
if (!redisProperties.isUseKeyPrefix()) {
config = config.disableKeyPrefix();
}
return config;
}
}
application.properties
spring.cache.type=redis
spring.cache.cache-names= music,pic
spring.cache.redis.time-to-live= 3600000
spring.cache.redis.key-prefix= Cache-
#缓存空值,默认就是true
spring.cache.redis.cache-null-values= true
次に、redisクライアントツールを開くと、上記のキャッシュのさまざまな構成が有効になっていることがわかります。