Springboot構成redis接続プール使用後に解放されない問題、
4652 ワード
高同時性を処理する際、キャッシュをよく使います.まず、redisの構成、注意事項について話します.
pom.xmlにspring-boot-starter-data-redisとspring-boot-starter-cacheを導入する必要があるこのように導入すると、キャッシュ構成はデフォルトでredisとなり、redisを構成するにはアプリケーションが必要になる.propertiesでは、次のパラメータを構成します. 1 2 3 4 5 6 7
この場合、redis自体がRedisTemplateとStringRedisTemplateの2つのテンプレートを構成し、redisの操作を実現します.ここではopsForValue()を使用してオブジェクトをセットする場合、まずRedisTemplateシーケンス化オブジェクトはJDKのオブジェクトシーケンス化を使用することに注意してください.したがって、オブジェクトはSerializableを実装する必要があります(インターネット上ではjacksonをシーケンス化する方法が推奨されていますが、JDK自体のシーケンス化を使用するとバイナリ文字が得られ、効率的で高速です.)次に、opsXXX()がgetオブジェクトに来ると、RedisTemplateとStringRedisTemplateは区別され、そうでないと所望の結果が得られない.
次にキャッシュと言いますが、ここではredisを使用しているのでシステムはredisをデフォルトでキャッシュしますが、redisが別のことをしたいなら、別のキャッシュフレームワークを使うとしたらどうすればいいですか?
1.では、まずアプリケーションで.propertiesでは、次のパラメータを構成します. 1 2 3 はpom.xmlには対応するキャッシュツール を導入する必要がある. 1 2 3 4 5
3.対応キャッシュインスタンス
完了
次の更新:
文章の中で書くのはあまり良くなくて、JDKを使ってバイナリキャッシュをすることを推薦しないべきで、JDKが持っているシーケンス化ツールから出てきたバイナリが長すぎて、再分布式環境、特に言語にまたがる環境、Thrift、ProtobufとAvroなどのシーケンス化通信ソリューションを推薦して、彼たちは友好的に回避することができて、XMLの体積が大きすぎて、解析性能が極めて悪いです;JSONの体積は比較的に小さく、解析は比較的速いが、表現能力が弱いという特徴がある.もちろん、jsonは人にとって読みやすさがよく、jackson 2を使いたいなら使えます.xはキャッシュとして、redisTemplateでsetKeySerializer/setValueSerializer/setHashValueSerializerなどのシーケンス化方式を配置することができ、ここでは
特に強調:Jackson 2 JsonRedisSerializerの代わりにGenericJackson 2 JsonRedisSerializerおよびJacksonJsonRedisSerializerを使用することを推奨します.GenericJackson 2 JsonRedisSerializerは汎用性を保持することができるからです.
原文から転載:https://blog.csdn.net/j3oker/article/details/52573965後で簡単に検索できるようにします.
pom.xmlにspring-boot-starter-data-redisとspring-boot-starter-cacheを導入する必要があるこのように導入すると、キャッシュ構成はデフォルトでredisとなり、redisを構成するにはアプリケーションが必要になる.propertiesでは、次のパラメータを構成します.
#redis
spring.redis.database=1 ##
spring.redis.host=192.168.99.100
spring.redis.port=6379
spring.redis.pool.max-active=1024 ##
spring.redis.pool.max-wait=1000 ##
spring.redis.pool.max-idle=200 ##
この場合、redis自体がRedisTemplateとStringRedisTemplateの2つのテンプレートを構成し、redisの操作を実現します.ここではopsForValue()を使用してオブジェクトをセットする場合、まずRedisTemplateシーケンス化オブジェクトはJDKのオブジェクトシーケンス化を使用することに注意してください.したがって、オブジェクトはSerializableを実装する必要があります(インターネット上ではjacksonをシーケンス化する方法が推奨されていますが、JDK自体のシーケンス化を使用するとバイナリ文字が得られ、効率的で高速です.)次に、opsXXX()がgetオブジェクトに来ると、RedisTemplateとStringRedisTemplateは区別され、そうでないと所望の結果が得られない.
次にキャッシュと言いますが、ここではredisを使用しているのでシステムはredisをデフォルトでキャッシュしますが、redisが別のことをしたいなら、別のキャッシュフレームワークを使うとしたらどうすればいいですか?
1.では、まずアプリケーションで.propertiesでは、次のパラメータを構成します.
#Cache
spring.cache.type=guava # , guava
spring.cache.cache-names[0]=outsourced #
com.google.guava
guava
19.0
3.対応キャッシュインスタンス
@Override //key '#'
@Cacheable(value = "outsourced", key = "#name")//value
public UserInfo fineOne(String name) {
UserInfo userInfo = userInfoRepository.findFirstByUserName(" ");
System.out.print(" key "+name+" ");
return userInfo;
}
完了
次の更新:
文章の中で書くのはあまり良くなくて、JDKを使ってバイナリキャッシュをすることを推薦しないべきで、JDKが持っているシーケンス化ツールから出てきたバイナリが長すぎて、再分布式環境、特に言語にまたがる環境、Thrift、ProtobufとAvroなどのシーケンス化通信ソリューションを推薦して、彼たちは友好的に回避することができて、XMLの体積が大きすぎて、解析性能が極めて悪いです;JSONの体積は比較的に小さく、解析は比較的速いが、表現能力が弱いという特徴がある.もちろん、jsonは人にとって読みやすさがよく、jackson 2を使いたいなら使えます.xはキャッシュとして、redisTemplateでsetKeySerializer/setValueSerializer/setHashValueSerializerなどのシーケンス化方式を配置することができ、ここでは
GenericJackson2JsonRedisSerializer
類を配置させ、具体的な配置は以下の方式を参考にすることができる @Resource
private RedisProperties redisProperties;
@Bean
public JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxIdle(10);
config.setMaxTotal(100);
config.setMaxWaitMillis(5000);
config.setMinIdle(0);
config.setTestOnBorrow(true);
config.setTestWhileIdle(true);
config.setNumTestsPerEvictionRun(2);
config.setTimeBetweenEvictionRunsMillis(30000);
config.setMinEvictableIdleTimeMillis(60000);
config.setSoftMinEvictableIdleTimeMillis(60000);
return config;
}
@Bean
public RedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory(jedisPoolConfig());
redisConnectionFactory.setDatabase(redisProperties.getDatabase());
redisConnectionFactory.setHostName(redisProperties.getHost());
redisConnectionFactory.setPort(redisProperties.getPort());
redisConnectionFactory.setPassword(redisProperties.getPassword());
redisConnectionFactory.setTimeout(15000);
redisConnectionFactory.setUsePool(true);
return redisConnectionFactory;
}
@Bean
public RedisTemplate redisTemplate() {
RedisTemplate template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory());
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
// template.setEnableTransactionSupport(true);
template.afterPropertiesSet();
return template;
}
特に強調:Jackson 2 JsonRedisSerializerの代わりにGenericJackson 2 JsonRedisSerializerおよびJacksonJsonRedisSerializerを使用することを推奨します.GenericJackson 2 JsonRedisSerializerは汎用性を保持することができるからです.
原文から転載:https://blog.csdn.net/j3oker/article/details/52573965後で簡単に検索できるようにします.