0. 이 글을 쓰는 목적
https://redis.io/docs/getting-started/
Redis 해보려다가 Redis Stack이라는게 보여서 이걸로 연동 맛보기 해보려고함
1. Redis와 Redis-stack의 다른점은?
Redis + Additional features 정도로 생각하면 될 것 같다.
2. 환경 구축
우선 Redis-stack은 딱히 이유는 없고 docker로 구축하려고 한다.
redis-stack-server와 redis-stack이 반겨준다.
이 중 뭘 골라야할지 고민이 되는데
redis-stack은 redis-stack-server와 GUI Client가 같이 들어있다.
redis-stack-server는 정말 딱 redis-stack 기능만 제공한다.
나는 사나이 개발자답게 redis-stack으로 GUI Client가 있는 이미지로 진행할것이다.
docker run -d --name redis-stack -p 6379:6379 -p 8001:8001 redis/redis-stack:latest
아무튼 설치가 되었으니 이제 뭔가를 해봐야할텐데
한번 코프링으로 연동을 해보자.
상남자 특 : 잘 몰라도 일단 시도함
3. OM(Object Mapper)
https://redis.io/docs/clients/
https://redis.io/docs/clients/om-clients/stack-spring/
이런 페이지가 있다.
아직 베타 버전이긴 하지만 Object-Mapper에 대해 존재한다.
Jedis라고 있는데 많은 고민에 빠지기 시작했다.
분명 공식 도큐먼트 상은 Jedis로 설명해주는데 검색을 해보니 Lettuce가 성능이 더 좋다고한다.
아 그냥 Lettuce써보자. 어떻게든 잘 하겠지. (라고 했지만 다음 글에서 해보겠습니다.)
gradle을 설정하다 의문이 들었다.
어처피 redis베이스니까 redis용 gradle로 우선 붙여도 되겠지?
redis와 redis-stack 의 기본 포트(default port : 6379)가 같다는건 위에서 설명이 나온것처럼 redis + Additional features니까 가능할거라고 믿고 진행을 한다.
gradle 추가
implementation ("org.springframework.boot:spring-boot-starter-data-redis")
놀랍게도 둘 다 기본 기능으로 제공중이다. 오호라…
둘 다 해볼까 하는 생각도 있었지만 아무튼 일단 Lettuce로 가즈아(라고 했지만 다음 글에서 하겠습니다.)
설정을 보다보니 RedisTemplate이라는게 보인다. 이게 뭘까.
공식 문서에서 읽어보자.
맨 위만 읽으면 Redis 데이터에 접근을 할 수 있게 해주는 헬퍼 클래스라고 한다.
3번째 문단에서는 이런 말이 보인다.
It provides RedisConnection handling such that neither the RedisCallback implementation nor the calling code needs to explicitly care about retrieving/closing Redis connections, or handling Connection lifecycle exceptions.
이 말도 요약을 하면 RedisConnection에 대해 신경쓸 필요가 없다고 한다. 너무 좋은 기능이다.
여기서 더 찾아보니 CRUDRepository이라는 것도 나온다. JPARepository처럼 데이터에 대해 쉽게 접근을 할 수 있게 해주는 것으로 보인다. JPARepository가 Entity를 베이스로 했듯 OM을 사용할때 사용하면 좋을 것 같다.
Redis에서는 CrudRepository의 구현체로 SimpleKeyValueRepository 를 사용한다.
더 내용이 깊어지면 이 글의 취지와 맞지 않아 다음 글에서 더 자세한 내용을 살펴보도록 하자.
우선 둘 다 사용하는 코드를 구축해보겠다.(라고 했지만 CrudRepository는 다음 글에서 하겠습니다.)
3. RedisTemplate 정말 간단한 테스트 코드 예제
간단하게 테스트 코드로 String key와 String value가 들어가는지 확인해보자.
RedisTemplate에서는 저장하는 타입에 따라 메서드를 다르게 사용해야한다.
단순히 값을 넣고 값을 꺼내는거라면 opsForValue를 사용하면 된다. 나는 간단하게 할거니까 이걸 사용할거다.
@SpringBootTest
class RedisTemplateTest @Autowired constructor(
private val redisTemplate: RedisTemplate<Any, Any>
) {
@DisplayName("기본 데이터 추가 테스트")
@Test
fun insertTest(){
val valueOperations = redisTemplate.opsForValue()
val key = "testKey1"
val value = "testValue1"
valueOperations[key] = value
println("value :: ${ valueOperations[key]}")
Assertions.assertEquals(value, valueOperations[key])
}
}
테스트 환경에서 실행한건 server에는 반영되지 않는다. 그러면 직접 redis-cli로 접속해서 해보자.
다음에는 더 다양한 예제와 실제 Controller부터 서비스까지 예제를 만들고 내부를 정리해보겠다.
'AMQP > Redis' 카테고리의 다른 글
Kotlin에서 Redis의 expire설정에 관하여 (4) | 2024.01.07 |
---|---|
그래서 Redis는 왜 사용해야하고 뭐가 좋은가?(2) - 캐시로 사용하기 (0) | 2023.09.11 |
그래서 Redis는 왜 사용해야하고 뭐가 좋은가?(1) (0) | 2023.09.03 |