複数のCacheManagerとspringboot


springboot統合Redisのは、
導入する必要があります

レタス接続が網状、複数のスレッド間の接続インスタンス(StatefulRedisConnection)基づく公式推進レタス接続プールは、同時にアクセスすることができ、スレッドセーフStatefulRedisConnectionなければなりません


@Configuration
パブリッククラスEhcacheConfig {


パブリックインターフェイスCacheManagerNames {
= "redisCacheManager"ストリングREDIS_CACHE_MANAGER。
文字列EHCACHE_CACHE_MANAGER = "ehCacheManager"。
}

@Bean(名= CacheManagerNames.REDIS_CACHE_MANAGER)
公衆RedisCacheManager redisCacheManager(RedisConnectionFactory工場){
FastJsonRedisSerializer <OBJECT> fastJsonRedisSerializer =新しいFastJsonRedisSerializer <>(Object.classを)。
RedisCacheConfiguration構成= RedisCacheConfiguration.defaultCacheConfig()。
設定= configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer))。entryTtl(期間。
RedisCacheManagerリターン
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(工場))
)(.cacheDefaults(コンフィギュレーション)を.build。

}

@Bean
公共EhCacheManagerFactoryBean cacheManagerFactoryBean(){
EhCacheManagerFactoryBeanビーン=新しいEhCacheManagerFactoryBean()。
bean.setConfigLocation(新ClassPathResource( "ehcache.xml"));
bean.setShared(真の);
Beanを返します。
}
/ **
* @description @Primary设置默认加载マネージャー
* @param豆
* @return org.springframework.cache.ehcache.EhCacheCacheManager
* @date 2019年5月31日4時38分PM
* @autherのlixin
* /
@Bean(名= CacheManagerNames.EHCACHE_CACHE_MANAGER)
@Primary
公共EhCacheCacheManager ehCacheCacheManager(EhCacheManagerFactoryBean豆){
戻り新しいEhCacheCacheManager(bean.getObject())。
}

/ **
* @description自定义缓存キー规则
* @return org.springframework.cache.interceptor.KeyGenerator
* @date 2019年5月31日午前4時38 PM
* @autherのlixin
* /
@Bean
公共するKeyGeneratorするKeyGenerator(){
リターン(目標、方法、のparams) - > {
StringBuilderのSB =新規のStringBuilder();
sb.append(target.getClass()のgetName()。)。
sb.append(method.getNameは());
のために(オブジェクトobj:paramsは){
//パラメータはハッシュコードは確かに同じではない、異なっていてもよいので、キャッシュキー必要が同じではない
sb.append(JSON.toJSONString(OBJ).hashCode ());
}
; sb.toString()を返す
};
}


/ **
*デフォルトの有効期限Redisのデータ、デフォルトを設定一日
*提供@cacheableシリアライゼーション
* @return
* /
@Bean
パブリックredisCacheConfigurationのredisCacheConfiguration(){
FastJsonRedisSerializer <オブジェクト> =新しい新しいfastJsonRedisSerializer fastJsonRedisSerializer <>(Object.classを);
RedisCacheConfiguration RedisCacheConfiguration.defaultCacheConfig設定=();
構成= configuration.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(fastJsonRedisSerializer))entryTtl(Duration.ofDays(1))。
設定を返します。
}
}
序列化需要自定义
 FastJsonRedisSerializerクラス

パブリッククラスFastJsonRedisSerializer <T>はRedisSerializer <T> {実装

のpublic static final文字セットDEFAULT_CHARSET = Charset.forName( "UTF-8");

プライベートクラス<T> clazz。

公共FastJsonRedisSerializer(クラス<T> clazz){
スーパー()。
this.clazz = clazz。
}

@Override
公共バイト[](T tを)シリアライズSerializationException {スロー
{(T == NULL)場合を
[0]に新しいバイトを返します。
}
JSON.toJSONString(T、SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET)を返します。
}

@Override
パブリックTのデシリアライズ(バイト[]バイト)SerializationExceptionを{スロー
IF(バイト== NULL || bytes.length <= 0){
戻りヌル。
}
文字列str =新しい文字列(バイト、DEFAULT_CHARSET)。
リターン(T)JSON.parseObject(STR、clazz)。
}

}





おすすめ

転載: www.cnblogs.com/pengthrree/p/10956078.html