//Redis cache
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
#Redis Cache
spring:
redis:
host: localhost
port: 6379
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Bean
public RedisConnectionFactory redisConnectionFactory() {
return new LettuceConnectionFactory(host, port);
}
@Bean
public RedisTemplate<?,?> redisTemplate() {
RedisTemplate<?,?> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory());
return redisTemplate;
}
}
.yml에 작성한 redis 서버 호스트(localhost)와 포트번호(port)를 @Value를 이용해 Redis 서버연결에 사용한다.
Jedis, Lettuce
Java의 Redis Client는 Jedis, Lettuce가 있다고 한다. Spring boot 2.0에서 부터는 Lettuce가 탑재되어 있다고 한다. 나중에 좀더 공부해야겠다🤣
Spring Boot에서 Redis Cache를 사용하는 방법으로는 크게 RedisRepository
와 RedisTemplate
가 있다. 이번 프로젝트에서는 RedisTemplate를 사용해 볼 예정이다.
RedisTemplate이 특정 Entiry뿐만 아니라 원하는 여러가지 타입(자료형)을 넣을수 있다고 한다.
RedisTemplate를 선언한후 원한는 Key, Value 타입에 맞게 Operations(String,Hash,Set등)를 선언하여 사용할수 있다는 장점이 있다.
위에서 보면 RedisTemplate<?,?>
와 같이 선언을 하여 RedisTemplate
을 주입받을때 원하는 Key,Value 타입을 지정하여 주입받을수 있게 하였다.
build.gradle에 dependencies만 적용하게 되면 redis 사용할수 있을줄 알았지만 별도의 설치를 해야지만 가능했다.
https://github.com/microsoftarchive/redis/releases
위 깃허브 주소에서 Redis-x64-3.0.504.msi를 다운받는다.
배포시(AWS EC2) 마찬가지로 배포서버(리눅스)에 Redis를 설치해야된다. 아래 링크를 통해 참고하였다. 너무 번거롭다 ㅠㅠ 나중에 Docker를 사용해서 이러한 번거러움을 해결해야지🤣
https://monynony0203.tistory.com/107
@SpringBootTest
public class RedisTest {
@Autowired private RedisTemplate<String ,String> redisTemplate;
@Test
public void testStrings() throws Exception {
//given
ValueOperations<String, String> valueOperations = redisTemplate.opsForValue();
String key = "accessToken";
//when
valueOperations.set(key, "test");
//then
String value = valueOperations.get(key);
Assertions.assertThat(value).isEqualTo("test");
}
}
Redis Cache에 값이 정상적으로 들어갔는지를 간단히 테스트 하기 위해 opsForValue()
를 통해 String Operations만을 테스트 해보았다.
Set, Hash등 다양한 자료구조의 Operations이 존재한다.