春は十分高速なキャッシュメモリのさまざまな管理することができます。
これらの共通メモリキャッシュライブラリの実装はRedisの、Ehcacheのを持っています。
この記事のRedisとの取引は、すべての後に、この事は、使用に非常に簡単です。
キャッシュを管理するためorg.springframework.cache.Cacheとorg.springframework.cache.CacheManager二つのインターフェースによってスプリング
彼らの関係はこれで、キャッシュの実装クラスがRedisCacheManagerですRedisの:
オブジェクト
<-AbstractCacheManager =>(のCacheManager、InitializingBean)
<-AbstractTransactionSupportingCacheManager
< - RedisCacheManager
RedisCacheManagerは、インタフェースのCacheManagerインターフェイスを実装して見ることができます。
まず、どのようにキーのRedisをカスタマイズします
あなたが登録するデフォルトの方法を使用する場合RedisCacheManagerを、次のように:
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofHours(この .cacheTimeOutHour))
コメントはこれであると仮定します。
@Cacheable(値= "getUserPoJoById"、キー= "#はuserId")
生成されたキーは、このような形のRedisされています。
getUserPoJoById :: 103
ここで、二重コロン(::)区切り文字です。
これは、ある次のようにRedisCacheConfiguration.defaultCacheConfig()ソースコード:
パブリック 静的RedisCacheConfiguration defaultCacheConfig(){ リターン defaultCacheConfig(NULL )。 } パブリック 静的RedisCacheConfiguration defaultCacheConfig(@NullableのClassLoaderクラスローダ){ DefaultFormattingConversionService conversionService = 新しいDefaultFormattingConversionService()。 registerDefaultConverters(conversionService)。 返す 新しい RedisCacheConfigurationを(Duration.ZERO、真の、本当の、CacheKeyPrefix。シンプル() 、 、SerializationPair.fromSerializer(RedisSerializer.string()) SerializationPair.fromSerializer(RedisSerializer.java(クラスローダー))、conversionService)。 }
上記のコードのプレフィックスキーが使用されているから見ることができCacheKeyPrefix.simple() 、。CacheKeyPrefix シンプル()は次のように実装されています。
@FunctionalInterface パブリック インターフェースCacheKeyPrefix { / ** *計算実際{接頭辞@literal のRedisに格納されたキー}。 * * @paramのcacheNameを指定は{になることはありません@literal ヌル}。 * @return 決して{ @literal ヌル}。 * / 文字列の計算(文字列cacheNameを指定)。 / ** *デフォルト{作成@link プレフィックスが{でキーをキャッシュすることCacheKeyPrefix}スキーム@codeのダブル続いcacheNameを指定} *コロンを。キャッシュという名前の{ @codeMyCacheという}が{を持つすべてのキャッシュキー接頭辞ます@code MyCacheという::}を。 * * @return デフォルト{ @link CacheKeyPrefix}スキーム。 * / 静的のCacheKeyPrefixシンプル(){ リターン名- >名+ "::" 。 } }
単純な実装CacheKeyPrefix方法は計算に相当します。
文字列の計算(列cacheNameを指定){
リターンcacheNameを指定+ "::"。
}
だから、デフォルトでは、それらを分離するために、ダブルコロンを使用することです。
しかし、多くの場合、我々は、キーがこの形式でのRedis、私たちがしたいことしたくありません。
- 全体のキー接頭辞の前に
- 別の区切り文字を使用して
どのようにそれを行うには?コールCacheKeyPrefixのカスタマイズを実現することができます。
で見てみましょうCacheKeyPrefix唯一のインターフェース法(非static):
文字列の計算(列cacheNameを指定)。
我々は、計算によって達成する必要があるかもしれないこと。
アイデアを、その後、次のように実装したものです:
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofHours(この .cacheTimeOutHour))computePrefixWith(cacheNameを指定- > cacheNameを指定+ この.keyPrefix)。 RedisCacheManager CM = RedisCacheManager.builder(redisConnectionFactory).cacheDefaults(redisCacheConfiguration).build(); cm.setTransactionAware(真の);
以前クリティカルコードセクション:computePrefixWith(たcachename - > +たcachename この.keyPrefix)。
私たちは、RedisCacheConfigurationの実装コードのcomputePrefixWithを見て:
公共RedisCacheConfiguration computePrefixWith(CacheKeyPrefix cacheKeyPrefix){ Assert.notNull(cacheKeyPrefix、 "接頭辞を計算するための関数がNULLであってはなりません!" ); 返す 新しい RedisCacheConfigurationを(TTL、cacheNullValues、真、cacheKeyPrefix、keySerializationPair、 valueSerializationPair、conversionService)。 }
したがってコード:たcachename - > +たcachename この.keyPrefixは構築することであるCacheKeyPrefixに計算方法を
文字列の計算(列cacheNameを指定){ 戻り cacheNameを指定+ この.keyPrefix。 }
あなたは接頭辞を追加したい場合は、それはすることができます。
computePrefixWith(たcachename - > this.getCachePrefix + " - >" + +たcachename この.keyPrefix)
の計算方法と等価でなる:リターンthis.getCachePrefix + " - >" + +たcachename この.keyPrefix
精通していない場合多用ラムダ後5.1.xの春には、あなたはこのコードを読み取ることができません。
第二に、その必要性の注意を他の重要な側面の定義
1.複数のアプリケーションが時間Redisの例を共有する場合、接頭辞の使用を注意
2.値の多くがあれば、それは短いキーを推奨し、名前に重要な文書を形成しています