diff --git a/src/main/java/org/runnect/server/config/redis/RedisConfig.java b/src/main/java/org/runnect/server/config/redis/RedisConfig.java index 7cd9b7c..a5bf359 100644 --- a/src/main/java/org/runnect/server/config/redis/RedisConfig.java +++ b/src/main/java/org/runnect/server/config/redis/RedisConfig.java @@ -1,14 +1,21 @@ package org.runnect.server.config.redis; +import io.lettuce.core.ClientOptions; +import io.lettuce.core.SocketOptions; +import io.lettuce.core.SslOptions; import org.springframework.beans.factory.annotation.Value; import org.springframework.cache.annotation.EnableCaching; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.connection.RedisStandaloneConfiguration; +import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration; import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory; import org.springframework.data.redis.core.ListOperations; import org.springframework.data.redis.core.RedisTemplate; +import java.time.Duration; + @EnableCaching @Configuration public class RedisConfig { @@ -19,9 +26,38 @@ public class RedisConfig { @Value("${spring.data.redis.port}") private int port; + @Value("${spring.data.redis.password:}") + private String password; + + @Value("${spring.data.redis.ssl.enabled:false}") + private boolean sslEnabled; + @Bean public RedisConnectionFactory redisConnectionFactory() { - return new LettuceConnectionFactory(host, port); + RedisStandaloneConfiguration standaloneConfig = new RedisStandaloneConfiguration(host, port); + if (!password.isBlank()) { + standaloneConfig.setPassword(password); + } + + ClientOptions.Builder clientOptionsBuilder = ClientOptions.builder() + .socketOptions(SocketOptions.builder() + .connectTimeout(Duration.ofSeconds(30)) + .build()); + if (sslEnabled) { + clientOptionsBuilder.sslOptions(SslOptions.builder() + .handshakeTimeout(Duration.ofSeconds(30)) + .build()); + } + + LettuceClientConfiguration.LettuceClientConfigurationBuilder clientConfigBuilder = + LettuceClientConfiguration.builder() + .clientOptions(clientOptionsBuilder.build()) + .commandTimeout(Duration.ofSeconds(30)); + if (sslEnabled) { + clientConfigBuilder.useSsl(); + } + + return new LettuceConnectionFactory(standaloneConfig, clientConfigBuilder.build()); } @Bean