개발용 메모장...

[Java]/[Spring]

[SpringBoot] Redis 설정 ( Cache 사용 )

redeyesboy 2024. 9. 20. 10:46

1. Redis 설정

- 이전 Redis 설정 글 참조.

https://redeyesboy.tistory.com/17

 

[SpringBoot] Redis 설정 ( RedisTemplate 사용 )

1. 의존성 추가 org.springframework.boot spring-boot-starter-data-redis 2. Redis 관련 설정 추가- application.propertiesspring.data.redis.host=127.0.0.1spring.data.redis.port=6379spring.data.redis.password=비밀번호 3. Spring Boot 설정 파

redeyesboy.tistory.com

 

2. Spring Boot 설정 추가

@EnableCaching
@Configuration
public class RedisConfig {

	@Value(value = "${spring.data.redis.host}")
	private String host;

	@Value(value = "${spring.data.redis.port}")
	private String port;

	@Value(value = "${spring.data.redis.password}")
	private String password;

	@Bean
	RedisConnectionFactory redisConnectionFactory() {
		RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
		redisStandaloneConfiguration.setHostName(host);
		redisStandaloneConfiguration.setPort(Integer.valueOf(port));
		redisStandaloneConfiguration.setPassword(password);
		LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration);
		return lettuceConnectionFactory;
	}

	@Bean
	RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
		RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
		redisTemplate.setConnectionFactory(redisConnectionFactory);
		redisTemplate.setKeySerializer(new StringRedisSerializer());
		redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
		redisTemplate.setHashKeySerializer(new StringRedisSerializer());
		redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
		return redisTemplate;
	}

	@Bean
	CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
		RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
			.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
			.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
			.entryTtl(Duration.ofHours(1));
		return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory).cacheDefaults(redisCacheConfiguration).build();
	}

}

 

4. 사용예시

@Slf4j
@Service
@RequiredArgsConstructor
public class CodeUtilsService {

	private final CodeUtilsDao codeUtilsDao;

	@Cacheable(cacheNames = Constants.CACHE_NAME_COMMON_CODE, key = "#reqDto.getCacheKey()", cacheManager = Constants.DEFAULT_CACHE_MANAGER)
	public List<CommonCodeDto> selectCommonCodeList(CommonCodeDto reqDto) {
		return codeUtilsDao.selectCommonCodeList(reqDto);
	}

	@Cacheable(cacheNames = Constants.CACHE_NAME_COMMON_CODE, key = "#reqDto.getCacheKey()", cacheManager = Constants.DEFAULT_CACHE_MANAGER)
	public CommonCodeDto selectCommonCode(CommonCodeDto reqDto) {
		return codeUtilsDao.selectCommonCode(reqDto);
	}

	@CacheEvict(cacheNames = Constants.CACHE_NAME_COMMON_CODE, key = "#reqDto.getCacheKey()", cacheManager = Constants.DEFAULT_CACHE_MANAGER)
	public void deleteCommonCodeCache(CommonCodeDto reqDto) {
		log.info("DELETE CACHE KEY :: {}::{}", Constants.CACHE_NAME_COMMON_CODE, reqDto.getCacheKey());
	}

}