package com.ga.common.config; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.cache.CacheManager; import org.springframework.cache.annotation.EnableCaching; 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.RedisConnectionFactory; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.RedisSerializationContext; import org.springframework.data.redis.serializer.StringRedisSerializer; import java.time.Duration; @Configuration @EnableCaching public class RedisConfig { @Bean public RedisTemplate redisTemplate(RedisConnectionFactory cf, ObjectMapper objectMapper) { RedisTemplate tpl = new RedisTemplate<>(); tpl.setConnectionFactory(cf); tpl.setKeySerializer(new StringRedisSerializer()); tpl.setHashKeySerializer(new StringRedisSerializer()); GenericJackson2JsonRedisSerializer json = new GenericJackson2JsonRedisSerializer(objectMapper); tpl.setValueSerializer(json); tpl.setHashValueSerializer(json); return tpl; } @Bean public CacheManager cacheManager(RedisConnectionFactory cf, ObjectMapper objectMapper) { RedisCacheConfiguration cfg = RedisCacheConfiguration.defaultCacheConfig() .entryTtl(Duration.ofHours(1)) .disableCachingNullValues() .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer( new GenericJackson2JsonRedisSerializer(objectMapper))); return RedisCacheManager.builder(cf).cacheDefaults(cfg).build(); } }