728x90
build.gradle
dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
}
application.yml
spring:
redis:
host: ${REDIS_HOST}
port: ${REDIS_PORT}
password: ${REDIS_PASSWORD}
비밀번호를 설정하지 않았다면 password는 빼도 된다
EC2에 도커를 활용하여 redis를 설치해서 ec2의 퍼블릭 ip와 설정한 포트번호를 추가하였다.
** docker에서 redis container 실행하기
sudo docker run -p 6379:6379 --name redis -d redis:latest --requirepass "비밀번호"
RedisConfig
@Configuration
@EnableCaching
class RedisConfig(
@Value("\${spring.redis.host}")
private val host: String,
@Value("\${spring.redis.port}")
private val port: Int,
@Value("\${spring.redis.password}")
private val password: String
) {
@Bean
fun redisConnectionFactory(): RedisConnectionFactory {
val redisStandaloneConfiguration = RedisStandaloneConfiguration()
redisStandaloneConfiguration.hostName = host
redisStandaloneConfiguration.port = port
redisStandaloneConfiguration.password = RedisPassword.of(password)
return LettuceConnectionFactory(redisStandaloneConfiguration)
}
@Bean
fun redisTemplate(): RedisTemplate<String, Any>? {
val redisTemplate = RedisTemplate<String, Any>()
redisTemplate.keySerializer = StringRedisSerializer()
redisTemplate.valueSerializer = StringRedisSerializer()
redisTemplate.setConnectionFactory(redisConnectionFactory())
return redisTemplate
}
}
1. redisConnectionFactory
hostname, port, password로 연결을 시도한다
2. serializer를 빼먹으면 올바르게 key, value값이 나타나지 않는다고 한다.
Service 구현
fun getReviewTags(storeNo: Int): List<ReviewTagResponseDto> {
val key = "store$storeNo"
val redisTags = redisTemplate.opsForZSet().reverseRangeWithScores(key, 0, -1)
val tagList: MutableList<ReviewTagResponseDto>
if (redisTags.isNullOrEmpty()) {
// redis에 저장된 값이 없을 경우
tagList = reviewRepository.getTagList(storeNo)
tagList.forEach {
redisTemplate.opsForZSet().add(key, it.tagNo.toString(), it.tagCnt.toDouble())
}
...
redisTemplate.expire(key, 30, TimeUnit.MINUTES)
} else {
tagList = mutableListOf()
// dto로 변환
...
}
return tagList
}
redis의 Sorted Set을 이용하여 tag들의 count를 저장하는 기능을 구현하였다.
728x90
'BackEnd > Spring' 카테고리의 다른 글
[Spring/JPA] JPA 연관관계에서 지연 로딩과 즉시 로딩 (2) | 2024.02.04 |
---|---|
[Spring/JPA] @Version을 통한 낙관적 락(Optimistic Lock) (1) | 2023.06.10 |
[Spring] 스프링 요청 파라미터 - Reqeust Param (required, defaultValue) (0) | 2022.12.12 |
[Spring] 로깅 logging (0) | 2022.12.12 |
[Spring] 스프링 MyBatis 연동 (0) | 2022.11.01 |