|
@@ -1,6 +1,5 @@
|
|
|
package com.diagbot.config;
|
|
|
|
|
|
-import com.diagbot.util.BeanUtil;
|
|
|
import com.fasterxml.jackson.annotation.JsonAutoDetect;
|
|
|
import com.fasterxml.jackson.annotation.PropertyAccessor;
|
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
@@ -14,6 +13,7 @@ import org.springframework.cache.annotation.EnableCaching;
|
|
|
import org.springframework.cache.interceptor.KeyGenerator;
|
|
|
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.RedisStandaloneConfiguration;
|
|
|
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
|
|
@@ -22,6 +22,7 @@ import org.springframework.data.redis.connection.lettuce.LettucePoolingClientCon
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
|
|
|
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
|
|
|
+import org.springframework.data.redis.serializer.RedisSerializationContext;
|
|
|
import org.springframework.data.redis.serializer.StringRedisSerializer;
|
|
|
|
|
|
import java.time.Duration;
|
|
@@ -80,24 +81,32 @@ public class RedisConfigurer extends CachingConfigurerSupport {
|
|
|
connection.setPassword(password);
|
|
|
connection.setDatabase(Integer.valueOf(databaseCache));
|
|
|
GenericObjectPoolConfig poolConfig = getRedisConfig();
|
|
|
- LettuceClientConfiguration lettuceClientConfiguration = LettucePoolingClientConfiguration.builder()
|
|
|
- .commandTimeout(Duration.ofSeconds(timeout))
|
|
|
+ LettuceClientConfiguration builder = LettucePoolingClientConfiguration.builder()
|
|
|
+ .commandTimeout(Duration.ofMillis(timeout))
|
|
|
.poolConfig(poolConfig)
|
|
|
.shutdownTimeout(Duration.ZERO)
|
|
|
.build();
|
|
|
- LettuceConnectionFactory factory = new LettuceConnectionFactory(connection, lettuceClientConfiguration);
|
|
|
- factory.afterPropertiesSet();
|
|
|
+ LettuceConnectionFactory factory = new LettuceConnectionFactory(connection, builder);
|
|
|
return factory;
|
|
|
}
|
|
|
|
|
|
@Bean
|
|
|
@Override
|
|
|
public CacheManager cacheManager() {
|
|
|
- // 初始化缓存管理器,在这里我们可以缓存的整体过期时间什么的,我这里默认没有配置
|
|
|
- RedisCacheManager.RedisCacheManagerBuilder builder = RedisCacheManager
|
|
|
- .RedisCacheManagerBuilder
|
|
|
- .fromConnectionFactory(lettuceConnectionFactory);
|
|
|
- return builder.build();
|
|
|
+ RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
|
|
|
+ // 设置 key为string序列化
|
|
|
+ .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
|
|
|
+ // 设置value为json序列化
|
|
|
+ .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(getSerializer()))
|
|
|
+ // 不缓存空值
|
|
|
+ .disableCachingNullValues();
|
|
|
+ RedisCacheManager cacheManager = RedisCacheManager.builder(lettuceConnectionFactory)
|
|
|
+ .cacheDefaults(redisCacheConfiguration)
|
|
|
+ .transactionAware()
|
|
|
+ .build();
|
|
|
+ cacheManager.afterPropertiesSet();
|
|
|
+ log.info("RedisCacheManager config success");
|
|
|
+ return cacheManager;
|
|
|
}
|
|
|
|
|
|
@Bean(name = "springSessionDefaultRedisSerializer")
|
|
@@ -153,54 +162,59 @@ public class RedisConfigurer extends CachingConfigurerSupport {
|
|
|
/**
|
|
|
* 短信验证使用的redis
|
|
|
*
|
|
|
- * @param factory
|
|
|
* @return
|
|
|
*/
|
|
|
@Bean(name = "redisTemplateForIdc")
|
|
|
- public RedisTemplate<String, Object> redisTemplateForIdc(LettuceConnectionFactory factory) {
|
|
|
- return getRedisTemplate(factory, Integer.valueOf(databaseIdc));
|
|
|
+ public RedisTemplate<String, Object> redisTemplateForIdc() {
|
|
|
+ return getRedisTemplate(Integer.valueOf(databaseIdc));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 短信验证使用的redis
|
|
|
*
|
|
|
- * @param factory
|
|
|
* @return
|
|
|
*/
|
|
|
@Bean(name = "redisTemplateForSms")
|
|
|
- public RedisTemplate<String, Object> redisTemplateForSms(LettuceConnectionFactory factory) {
|
|
|
- return getRedisTemplate(factory, Integer.valueOf(databaseSms));
|
|
|
+ public RedisTemplate<String, Object> redisTemplateForSms() {
|
|
|
+ return getRedisTemplate(Integer.valueOf(databaseSms));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 图片验证使用的redis
|
|
|
*
|
|
|
- * @param factory
|
|
|
* @return
|
|
|
*/
|
|
|
@Bean(name = "redisTemplateForImg")
|
|
|
- public RedisTemplate<String, Object> redisTemplateForImg(LettuceConnectionFactory factory) {
|
|
|
- return getRedisTemplate(factory, Integer.valueOf(databaseImg));
|
|
|
+ public RedisTemplate<String, Object> redisTemplateForImg() {
|
|
|
+ return getRedisTemplate(Integer.valueOf(databaseImg));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Token使用的redis
|
|
|
*
|
|
|
- * @param factory
|
|
|
* @return
|
|
|
*/
|
|
|
@Bean(name = "redisTemplateForToken")
|
|
|
- public RedisTemplate<String, Object> redisTemplateForToken(LettuceConnectionFactory factory) {
|
|
|
- return getRedisTemplate(factory, Integer.valueOf(databaseToken));
|
|
|
+ public RedisTemplate<String, Object> redisTemplateForToken() {
|
|
|
+ return getRedisTemplate(Integer.valueOf(databaseToken));
|
|
|
}
|
|
|
|
|
|
- private RedisTemplate<String, Object> getRedisTemplate(LettuceConnectionFactory factory, Integer database) {
|
|
|
- LettuceConnectionFactory factory2 = new LettuceConnectionFactory();
|
|
|
- BeanUtil.copyProperties(factory, factory2);
|
|
|
- factory2.setDatabase(database);
|
|
|
+ private RedisTemplate<String, Object> getRedisTemplate(Integer database) {
|
|
|
+ RedisStandaloneConfiguration connection = new RedisStandaloneConfiguration();
|
|
|
+ connection.setHostName(host);
|
|
|
+ connection.setPort(port);
|
|
|
+ connection.setPassword(password);
|
|
|
+ connection.setDatabase(database);
|
|
|
+ GenericObjectPoolConfig poolConfig = getRedisConfig();
|
|
|
+ LettuceClientConfiguration builder = LettucePoolingClientConfiguration.builder()
|
|
|
+ .commandTimeout(Duration.ofMillis(timeout))
|
|
|
+ .poolConfig(poolConfig)
|
|
|
+ .shutdownTimeout(Duration.ZERO)
|
|
|
+ .build();
|
|
|
+ LettuceConnectionFactory factory = new LettuceConnectionFactory(connection, builder);
|
|
|
|
|
|
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
|
|
|
- redisTemplate.setConnectionFactory(factory2);
|
|
|
+ redisTemplate.setConnectionFactory(factory);
|
|
|
|
|
|
// value值的序列化
|
|
|
redisTemplate.setValueSerializer(getSerializer());
|