꾸물꾸물 졔의 개발공부
[Redis] Redis(레디스) 란? 본문
Redis (레디스)
Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리시스템이다. key-value쌍의 해시 맵 형태를 가진 서버이기 때문에 별도의 쿼리 없이 Key를 통해 빠르게 결과를 불러올 수 있다.
DB, Cache, Message Queue, Shared Memory 로 사용되며 인메모리 데이터 구조를 가진 저장소이다. 즉, 레디스는 모든 데이터를 메모리에 저장하고 조회한다. 그렇기에 작업 속도가 굉장히 빠르다.
❔Redis를 사용하는 이유
데이터베이스가 있는데도 Redis라는 인메모리 데이터 저장소를 사용하는 이유는 무엇일까 ?
DB는 물리 디스크에 직접 데이터를 쓰고 저장하기 때문에, 서버에 문제가 발생하여 다운되더라도 데이터 손실의 위험이 없다. 하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질 경우 부하가 많아져 느려질 수 있다. 일반적으로 규모가 작고, 사용자가 적은 서비스의 경우에는 WEB-WAS-DB의 구조로도 DB에 무리가 되지 않지만, 사용자가 늘어난다면 DB가 과부하 될 수 있기 때문에 DB 스케일 인/아웃이나 캐시 서버의 도입을 고려한다.
이때, 캐시 서버로 이용할 수 있는 것이 바로 Redis 이다.
캐시는 한번 읽어온 데이터를 임의의 공간에 복사하여 이후 필요시 빠르게 결과값을 불러올 수 있다. 같은 요청이 여러번 들어오는 경우 매번 DB에 접근할 필요 없이 캐시 서버에서 복사된 결과값을 불러올 수 있으므로 DB의 부하를 줄이고 서비스의 속도도 느려지지 않는 장점이 있다.
💡Cache 참고
[CS] Cache(캐시) 란?
Cache (캐시) 자주 사용하는 데이터나 값을 미리 복사해 놓는 임시 장소 Cache는 저장 공간이 작고 비용이 비싼 대신 빠른 성능을 제공한다. 👉 Cache 사용을 고려하는 경우 접근 시간에 비해 원래 데
jiko1456.tistory.com
👉 Redis의 특징
- Key-Value 구조이기 때문에 쿼리 불필요
- 디스크가 아닌 메모리에서 데이터를 처리하기 때문에 빠른 속도 지원
- String, List, Set, Hash, Sort set 다양한 자료구조 지원
- Single Thread 방식으로 한번에 하나의 명령만 처리 가능
- 영속성을 지원하는 인메모리 데이터 저장소
Redis에는 String 뿐만 아니라 다양한 자료구조를 저장할 수 있다. 가장 일반적으로는 String 형태의 key-value 이고, Set은 String의 집합으로써 여러 개의 값을 하나의 value 에 넣을 수 있다. Sorted Set의 경우 중복된 데이터를 담지 않은 Set 구조에 정렬 Sort를 적용한 것이고, List는 Array 형식의 데이터 구조이다. List는 처음과 마지막에 데이터를 넣고 빼는 것은 빠르지만 중간에 데이터를 삽입하거나 삭제하는데에는 시간이 꽤 소요된다.
Redis는 Single Thread 방식으로 원자적으로 명령어를 수행할 수 있다. 그렇기 때문에 중간에 처리 시간이 긴 명령어가 있을 경우, 이후에 명령어들은 해당 명령어가 종료될 때까지 대기가 필요하다. 하지만 redis의 set,get 명령어의 경우 초당 10만개 이상을 처리할 수 있을 만큼 빠른 속도를 가지고 있다.
🌟즉, Redis는 고성능 키-값 저장소로서 String, Set, List, Hash 등 다양한 자료구조를 지원하는 NoSQL이다.
👉 Redis의 영속성
Redis는 영속성을 보장하기 위해 데이터를 디스크에 저장할 수 있다. 서버가 다운되더라도 디스크에 저장된 데이터를 읽어서 메모리에 로딩한다.(영속성 : 데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성)
데이터를 디스크에 저장하기 위한 방법은 크게 두가지가 있다.
- RDB(Snapshottin) 방식 : 명시된 간격마다 순간적으로 메모리에 있는 내용 전체를 DISK로 옮겨 담는 방식
- AOF(Append On File) 방식 : Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 방식, 서버 재시작시 기록한 log가 수행되어 원래의 데이터 셋을 재 구축
👉 Redis의 컬렉션
Redis는 단순한 Key-Value 쌍이 아닌, 다양한 데이터 구조체를 지원한다.
이렇게 다양한 자료구조를 지원하게 되면 개발의 편의성이 좋아지고 난이도가 낮아진다는 장점이 있다. 예를들어, 어떤 데이터를 정렬해야 하는 상황이 있을 때 DBMS를 이용한다면 DB에 데이터를 저장하고, 저장한 데이터를 정렬하여 읽어오는 과정을 수행해야 한다. 또한 디스크에 직접 접근을 해야하기 때문에 시간이 더 걸린다. 하지만 인메모리 데이터베이스인 Redis를 사용하고, 레디스에서 제공하는 Sorted-Set이라는 자료구조를 사용한다면 더 빠르고 간단하게 데이터를 정렬할 수 있다.
👉 Redis 사용시 주의할 점
- 서버에 장애가 발생했을 경우 그에 대한 운영 플랜이 필요 : 서버에 장애 발생시, 데이터 유실 위험
- 메모리 관리 중요 : 캐시 서버의 경우 작은 저장공간과 값비싼 가격이 단점
- 싱글 스레드기 때문에 처리하는데 시간이 오래 걸리는 요청, 명령은 피하는 것이 좋다.