package kr.co.vividnext.sodalive.configs import org.springframework.beans.factory.annotation.Value import org.springframework.context.annotation.Bean import org.springframework.context.annotation.ComponentScan import org.springframework.context.annotation.Configuration import org.springframework.context.annotation.FilterType import org.springframework.data.redis.connection.RedisClusterConfiguration import org.springframework.data.redis.connection.RedisConnectionFactory import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory import org.springframework.data.redis.core.RedisTemplate import org.springframework.data.redis.core.StringRedisTemplate import org.springframework.data.redis.repository.configuration.EnableRedisRepositories import java.time.Duration @Configuration @EnableRedisRepositories( basePackages = ["kr.co.vividnext.sodalive.redis.v2"], redisTemplateRef = "valkeyTemplate", excludeFilters = [ ComponentScan.Filter( type = FilterType.ASSIGNABLE_TYPE, classes = [org.springframework.data.jpa.repository.JpaRepository::class] ) ] ) class ValkeyConfig( @Value("\${spring.valkey.host}") private val host: String, @Value("\${spring.valkey.port}") private val port: Int ) { @Bean(name = ["valkeyConnectionFactory"]) fun valkeyConnectionFactory(): RedisConnectionFactory { val clusterConfig = RedisClusterConfiguration() clusterConfig.clusterNode(host, port) val clientConfig = LettuceClientConfiguration.builder() .commandTimeout(Duration.ofSeconds(5)) .shutdownTimeout(Duration.ofSeconds(5)) .useSsl() .disablePeerVerification() .build() return LettuceConnectionFactory(clusterConfig, clientConfig) } @Bean(name = ["valkeyTemplate"]) fun valkeyTemplate(): RedisTemplate<*, *> { val redisTemplate: RedisTemplate<*, *> = RedisTemplate() redisTemplate.setConnectionFactory(valkeyConnectionFactory()) return redisTemplate } @Bean(name = ["valkeyStringRedisTemplate"]) fun valkeyStringRedisTemplate(): StringRedisTemplate { return StringRedisTemplate(valkeyConnectionFactory()) } }