Files
oxygen-api/src/main/kotlin/top/fatweb/oxygen/api/config/RedisConfig.kt
2024-04-22 00:18:35 +08:00

48 lines
2.0 KiB
Kotlin

package top.fatweb.oxygen.api.config
import com.fasterxml.jackson.annotation.JsonAutoDetect
import com.fasterxml.jackson.annotation.JsonTypeInfo
import com.fasterxml.jackson.annotation.PropertyAccessor
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.data.redis.connection.RedisConnectionFactory
import org.springframework.data.redis.core.RedisTemplate
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer
import org.springframework.data.redis.serializer.StringRedisSerializer
/**
* Redis configuration
*
* @author FatttSnake, fatttsnake@gmail.com
* @since 1.0.0
*/
@Configuration
class RedisConfig {
@Bean
fun redisTemplate(redisConnectionFactory: RedisConnectionFactory): RedisTemplate<*, *> {
val redisTemplate = RedisTemplate<String, Any>()
redisTemplate.connectionFactory = redisConnectionFactory
val stringRedisSerializer = StringRedisSerializer()
val objectMapper = ObjectMapper().registerModules(JavaTimeModule()).apply {
setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY)
activateDefaultTyping(
this.polymorphicTypeValidator, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY
)
}
val anyJackson2JsonRedisSerializer = Jackson2JsonRedisSerializer(objectMapper, Any::class.java)
// Use String Redis Serializer to serialize and deserialize redis key values
redisTemplate.keySerializer = stringRedisSerializer
redisTemplate.valueSerializer = anyJackson2JsonRedisSerializer
// The Hash key also uses the String Redis Serializer serialization method.
redisTemplate.hashKeySerializer = stringRedisSerializer
redisTemplate.hashValueSerializer = anyJackson2JsonRedisSerializer
redisTemplate.afterPropertiesSet()
return redisTemplate
}
}