diff --git a/contact-center/app/src/main/java/com/chatopera/cc/config/WebServerSessionConfigure.java b/contact-center/app/src/main/java/com/chatopera/cc/config/WebServerSessionConfigure.java index 745ef7c4..b3920b3a 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/config/WebServerSessionConfigure.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/config/WebServerSessionConfigure.java @@ -22,13 +22,18 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.jedis.JedisClientConfiguration; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.StringRedisSerializer; -import org.springframework.session.data.redis.RedisFlushMode; -import org.springframework.session.data.redis.RedisOperationsSessionRepository; +import org.springframework.lang.NonNull; +import org.springframework.session.FlushMode; +import org.springframework.session.data.redis.RedisIndexedSessionRepository; import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession; +import java.time.Duration; + /** * maxInactiveIntervalInSeconds: 设置 Session 失效时间, @@ -68,26 +73,20 @@ public class WebServerSessionConfigure { @Primary @Bean - public RedisOperationsSessionRepository sessionRepository(RedisTemplate sessionRedisTemplate) { - RedisOperationsSessionRepository sessionRepository = new RedisOperationsSessionRepository(sessionRedisTemplate); - sessionRepository.setDefaultMaxInactiveInterval(maxInactiveIntervalInSeconds); - sessionRepository.setRedisFlushMode(RedisFlushMode.IMMEDIATE); - sessionRepository.setRedisKeyNamespace(RedisKey.CACHE_SESSIONS); - return sessionRepository; + public RedisIndexedSessionRepository redisIndexedSessionRepository(@NonNull RedisTemplate sessionRedisTemplate) { + RedisIndexedSessionRepository repository = new RedisIndexedSessionRepository(sessionRedisTemplate); + repository.setDefaultMaxInactiveInterval(maxInactiveIntervalInSeconds); + repository.setFlushMode(FlushMode.IMMEDIATE); + repository.setRedisKeyNamespace(RedisKey.CACHE_SESSIONS); + return repository; } @Bean public RedisTemplate sessionRedisTemplate() { - JedisConnectionFactory factory = new JedisConnectionFactory(); - factory.setHostName(host); - factory.setPort(port); - factory.setDatabase(sessionDb); - if (StringUtils.isNotBlank(pass)) { - factory.setPassword(pass); - } - factory.setTimeout(timeout); + JedisConnectionFactory factory = createJedisConnectionFactory(sessionDb); factory.afterPropertiesSet(); - RedisTemplate template = new RedisTemplate(); + + RedisTemplate template = new RedisTemplate<>(); template.setKeySerializer(new StringRedisSerializer()); template.setHashKeySerializer(new StringRedisSerializer()); template.setConnectionFactory(factory); @@ -97,18 +96,10 @@ public class WebServerSessionConfigure { /** * 存储AuthToken - * @return */ @Bean public AuthRedisTemplate authRedisTemplate() { - JedisConnectionFactory factory = new JedisConnectionFactory(); - factory.setHostName(host); - factory.setPort(port); - factory.setDatabase(tokenDb); - if (StringUtils.isNotBlank(pass)) { - factory.setPassword(pass); - } - factory.setTimeout(timeout); + JedisConnectionFactory factory = createJedisConnectionFactory(tokenDb); factory.afterPropertiesSet(); AuthRedisTemplate template = new AuthRedisTemplate(); @@ -118,4 +109,20 @@ public class WebServerSessionConfigure { return template; } + @NonNull + private JedisConnectionFactory createJedisConnectionFactory(int tokenDb) { + RedisStandaloneConfiguration standaloneConfiguration = new RedisStandaloneConfiguration(); + standaloneConfiguration.setHostName(host); + standaloneConfiguration.setDatabase(tokenDb); + standaloneConfiguration.setPort(port); + if (StringUtils.isNotBlank(pass)) { + standaloneConfiguration.setPassword(pass); + } + JedisClientConfiguration jedisClientConfiguration = JedisClientConfiguration.builder() + .connectTimeout(Duration.ofMillis(timeout)) + .readTimeout(Duration.ofMillis(timeout)) + .build(); + return new JedisConnectionFactory(standaloneConfiguration, jedisClientConfiguration); + } + } diff --git a/contact-center/app/src/main/resources/application.properties b/contact-center/app/src/main/resources/application.properties index 58d08648..714925d4 100644 --- a/contact-center/app/src/main/resources/application.properties +++ b/contact-center/app/src/main/resources/application.properties @@ -109,13 +109,13 @@ spring.redis.port=6379 # Redis\u670D\u52A1\u5668\u8FDE\u63A5\u5BC6\u7801\uFF08\u9ED8\u8BA4\u4E3A\u7A7A\uFF09 spring.redis.password= # \u8FDE\u63A5\u6C60\u6700\u5927\u8FDE\u63A5\u6570\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09 -spring.redis.lettuce.pool.max-active=-1 +spring.redis.jedis.pool.max-active=-1 # \u8FDE\u63A5\u6C60\u6700\u5927\u963B\u585E\u7B49\u5F85\u65F6\u95F4\uFF08\u4F7F\u7528\u8D1F\u503C\u8868\u793A\u6CA1\u6709\u9650\u5236\uFF09 -spring.redis.lettuce.pool.max-wait=-1 +spring.redis.jedis.pool.max-wait=-1 # \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5927\u7A7A\u95F2\u8FDE\u63A5 -spring.redis.lettuce.pool.max-idle=20 +spring.redis.jedis.pool.max-idle=20 # \u8FDE\u63A5\u6C60\u4E2D\u7684\u6700\u5C0F\u7A7A\u95F2\u8FDE\u63A5 -spring.redis.lettuce.pool.min-idle=10 +spring.redis.jedis.pool.min-idle=10 # \u8FDE\u63A5\u8D85\u65F6\u65F6\u95F4\uFF08\u6BEB\u79D2\uFF09\uFF0C\u56E0\u4E3A\u6625\u677E\u5BA2\u670D\u542F\u52A8\u65F6 # \u5360\u7528\u6BD4\u8F83\u5927\u7684\u65F6\u95F4\uFF0C\u6B64\u5904timeout\u503C\u5FC5\u987B\u8BBE\u7F6E\u4E3A0\u624D\u80FD\u6B63\u5E38\u542F\u52A8 spring.redis.timeout=0