Redis는 REmote DIctionary Server의 약자이다.
대표적은 No-SQL서버 중에 하나이고, 다양한 형태의 자료구조를 Key-Value의 구조로 메모리에 저장할 수 있는 In-memory DB 서버이다.
In-memory인만큼 빠른 성능을 자랑하고, 메인 DB의 캐싱 서버로써 많이 사용되곤 한다.
또, Pub/Sub 기능을 제공해서 Realtime 서비스 또한 구현할 수 있다.
Redis에 대한 자세한 설명이 궁금하다면, AWS의 Redis 문서를 참고해보면 좋을 것 같다.
Redis와 같은 캐시 서버를 사용하는 경우 대략적으로 이런 구조로 시스템이 만들어지게 된다. 즉, Request에서 요청한 데이터가 캐시 서버에 존재하는지 먼저 체크하고 있으면 바로 반환하고, 없으면 RDS에서 데이터를 꺼내서 전달하는 것이다.
이런 구조를 통해서 캐싱기능을 갖춘 매우 강력한 시스템을 갖게 되지만 요청을 가장 먼저 처리하는 캐시서버가 불의의 사고(?) 뻗어버리면, 서버나 DB가 멀쩡해도 시스템 전체가 먹통이 될 수 있게 된다. 그래서 캐시서버는 안정성이 매~~우 중요하다.
그렇기 때문에 내가 직접 설계한 구조나 체계를 갖고 있는 Redis 보다는 AWS와 같은 클라우드 서비스에서 제공하는 관리형 Redis를 사용하는 게 안정성 측면에서는 더 낫다고 할 수 있을 것 같다.
이야기가 나온 김에 AWS에서 제공하는 관리형 Redis 제품들에 대해서도 간단히 알아보자. AWS에서는 아래 2가지 서비스를 제공하여 손쉽고 안정적으로 Redis를 운영할 수 있게 해준다.
이 둘은 비슷하지만 여러 차이점이 존재하는데, 가장 큰 차이점이라고 한다면 ElastiCache는 메인 DB 앞에 위치시켜서 캐싱 및 기타 기능을 수행하도록 하는 것이라면 Amazon Memory DB for Redis는 메인 DB와 캐싱 DB의 기능을 하나로 제공하는 것이라고 볼 수 있다.
자세한 비교는 이 블로그를 참고하면 좋을 것 같다.
공식문서 : Understand Redis data types
Redis에서는 캐싱, 큐잉(Queueing), 이벤트 처리를 위한 저장 및 관리가 가능한 다양한 자료구조를 제공한다.
가장 기본적인 데이터 구조이고, 단일 문자열 또는 여러 문자열을 저장할 수 있다.
기본적으로 하나의 Key값에는 512MB까지 저장할 수 있다.
String 값을 LinkedList 구조로 저장한다. Stack 또는 Queue의 역할로 많이 사용된다.
우리가 상상하는 List와 관련된 대부분의 기본 메서드(?)는 제공하고, 자세한 내용은 공식문서를 참고하자.
Set은 중복된 값을 허용하지 않으므로, 특정 유저의 권한과 같은 고유한 값을 관리하는 목적으로 많이 사용된다.
HashMap과 유사한 자료구조이다. Key-value의 쌍으로 구성된 값들을 저장할 수 있다.
Set의 특징을 갖고 있으면서 순서까지 함께 저장할 수 있는 자료구조이다. Set안에 데이터들은 함께 저장한 순서 값을 기준으로 정렬하게 된다.
계속해서 적재되는 로그 유형의 데이터를 처리하기에 적절한 자료구조이다. 이벤트 값들을 저장한다거나 모니터링 로그와 같은 것들이 그 예가 될 수 있을 것 같다.
또, 각 Stream entry에 시간을 기준으로 유니크한 ID값을 부여해서 데이터를 조회할 때, ID값으로 조회한다면O(1)
의 성능을 갖게 되는 장점도 갖고 있다.
경도, 위도 값을 저장하고 관리하는데 특화된 데이터 구조이다. 이 자료구조를 활용하면 실시간 위치를 기반으로하는 서비스를 구현할 때, 빠른 성능의 서비스를 제공할 수 있게 된다.
위에서 언급한 것들 이외에도 Bigmap, Bigfield, HyperLogLog와 같은 데이터 구조들이 있는데, 이는 따로 설명하진 않도록 하겠다.
이미지 다운로드
docker pull redis
실행
docker run -p 6379:6379 redis
컨테이너 접속 후, Redis 서버 접속
redis-cli
여기서 Redis 서버까지 접속이 잘 된다면, 잘 세팅이 된 것이다.
Redis CLI로 데이터들을 직접 관리하는 경우는 많지 않겠지만, 실습을 한번 해보자.
먼저, 각 자료구조별로 CLI 명령어들이 공식문서에 매우 잘 정리되어 있으니, 자세한 것은 공식문서를 참고하자.
SET car:tesla ModelX
SET car:kia Niro
Set car:genesis g80
GET car:tesla
GET car:kia
GET car:genesis
GET car:hyundai
MSET car:hyundai Avante car:toyota Prius
MGET car:hyundai car:tesla car:kia
이번 글에서는 Redis를 설치 및 실행해보고, Redis-cli를 통해서 간단한 기능들을 사용해보았다.
다음 글에서는 Spring boot와 연동하여 사용해보는 시간을 가져보도록 하겠다.
그럼 이만 🙏