Explorar el Código

Lettuce连接redis

gaodm hace 6 años
padre
commit
22ebf6a937

+ 1 - 1
config-server/src/main/resources/shared/user-service-dev.yml

@@ -79,7 +79,7 @@ spring:
         max-idle: 5 # 连接池中的最大空闲连接
         max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
         min-idle: 0 # 连接池中的最小空闲连接
-    timeout: 0 # 连接超时时间(毫秒)
+    timeout: 20000 # 连接超时时间(毫秒)
 
 #mybatis
 mybatis-plus:

+ 1 - 1
config-server/src/main/resources/shared/user-service-local.yml

@@ -79,7 +79,7 @@ spring:
         max-idle: 5 # 连接池中的最大空闲连接
         max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
         min-idle: 0 # 连接池中的最小空闲连接
-    timeout: 0 # 连接超时时间(毫秒)
+    timeout: 20000 # 连接超时时间(毫秒)
 
 #mybatis
 mybatis-plus:

+ 1 - 1
config-server/src/main/resources/shared/user-service-pro.yml

@@ -79,7 +79,7 @@ spring:
         max-idle: 5 # 连接池中的最大空闲连接
         max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
         min-idle: 0 # 连接池中的最小空闲连接
-    timeout: 0 # 连接超时时间(毫秒)
+    timeout: 20000 # 连接超时时间(毫秒)
 
 #mybatis
 mybatis-plus:

+ 1 - 1
config-server/src/main/resources/shared/user-service-test.yml

@@ -79,7 +79,7 @@ spring:
         max-idle: 5 # 连接池中的最大空闲连接
         max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
         min-idle: 0 # 连接池中的最小空闲连接
-    timeout: 0 # 连接超时时间(毫秒)
+    timeout: 20000 # 连接超时时间(毫秒)
 
 #mybatis
 mybatis-plus:

+ 41 - 27
user-service/src/main/java/com/diagbot/config/RedisConfigurer.java

@@ -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());