Database

[NoSQL] Redis란

프로그래민 2021. 7. 3. 17:59
반응형

Redis란?

Redis란 "REmote DIctionaty System"의 약자로써 Key-Value구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반 NoSQL의 한 종류이다. In-Memory 기반의 Key-Value 구조 데이터 관리시스템으로써 빠르고 자유로운 데이터 처리 및 저장을 제공하지만, 서버가 꺼지게 되면 모든 데이터가 사라진다는 특징을 가지고 있다. 데이터 저장소로도 활용이 될 수도 있지만 앞서 얘기한 특징들 때문에 대표적으로 Memcached 처럼 RDBMS의 In-Memory Cache 솔루션으로써도 활용이 된다. 즉, DB로써 활용도 가능하고 Cache로써도 활용이 가능하다.

 

Redis의 특징

  • In-Memory 기반 : 모든 데이터를 메모리로 불러오기 때문에 데이터를 접근할 때의 속도(읽기 속도)가 빠르다. 즉 RDBMS가 디스크의 I/O를 이용하여 데이터를 읽어오는 작업에 비해 월등한 읽기 속도를 제공한다. 또한 메모리 기반이지만 필요하다면 디스크에 백업도 가능하다(다만 디스크에 write비용 발생).

  • 다양한 Collection : Key-Value의 구조에서 Value에 다양한 형태의 Collection을 지원한다.
    1. String : 일반적인 문자열로써 최대 512MB 길이 까지 지원한다. 또한 문자열뿐만 아니라 Integer와 같은 숫자와 JPEG와 같은 Binary File까지 저장할 수 있다.
    2. List : String의 묶음 자료구조의 형태로써 일종의 양방향 Linked List의 형태인 Quick List로 되어 있다. 양방향 Linked List인 만큼 First와 Last에서의 삽입, 삭제가 원할하게 이루어지고 Index값을 이용하여서도 삽입, 삭제를 할 수 있다.
    3. Set : String의 집합으로써 중복되지 않는 값을 데이터로 가지도록 되어 있다. Value값이 중복이 되지 않고, 따로 순서도 가지고 있지 않다. 보통 좋아요 기능 또는 방문 확인등에 사용이 된다.
    4. Sorted Set : String의 집합으로써 중복되지 않는 값을 데이터로 가지며 가중치(score)값을 같이 가지고 있어 가중치에 따라 정렬이 된 데이터를 가지도록 되어 있다. Value 값은 중복되지 않지만 가중치값은 중복될 수 있다.
    5. Hash : 내부에 또 다른 Key-Value로 이루어진 자료구조이다. 
  • 싱글 Thread 기반 : 싱글 Thread를 기반하기 때문에 연산들이 atomic 하고 경합(Race Condition)이 일어나지 않게된다. 경합이 없기에 트랜잭션을 쉽게 지원할 수 있고, 그에 따라 비지니스 로직에만 집중할 수 있다.

  • 대표적인 활용 - Session Management, Look Aside Cache, Write Back
    1. Session Management : Session을 Redis에 저장하여 서버끼리 세션을 공유하고, 서버의 재시작에도 세션이 초기화되는 것을 방지해주는 기능이다.
    2. Look Aside Cache : 자주 조회(읽기)되는 데이터를 Redis에 저장한 후, 재요청시 해당 데이터가 Redis에있는지 확인 후 데이터를 반환해주는 Cache를 의미한다.
    3. Wrtie Back : 잦은 Wrtie 작업(로깅 등)은 비용이 많이 들기에 Write를 Redis에 모아두었다가 배치 작업등을 통해 한번에 RDBMS에 Wrtie하는 작업등의 작업을 의미한다.

 

Memcached와의 비교

Memcached란 오픈소스 분산 메모리 캐싱 시스템으로써 인 메모리 Cache를 지원해준다.  인 메모리, Key-Value등의 특징이 Redis와 상당히 비슷하지만 약간의 차이가 존재한다. Redis의 경우 최대 512MB의 Value를 제공하지만, Memcached 같은 경우 최대 1MB까지의 Value를 제공한다. 또한 Value 타입에 있어서도 Redis는 String, Set 등 다양한 Collection을 지원하지만 Memcached는 bytes만을 제공한다. 그리고 작업환경에 있어서 Redis는 싱글 Thread 기반이고, Memcached는 멀티 Thread 기반이다. 보다 자세한 비교는 링크를 참고할 수 있다.

 

출처
https://meetup.toast.com/posts/224
https://americanopeople.tistory.com/148
https://www.happykoo.net/@happykoo/posts/40
https://sabarada.tistory.com/104
https://lygggg.github.io/blog/Redis/
반응형

'Database' 카테고리의 다른 글

[DB] Database의 샤딩(Sharding)  (0) 2022.02.08
[DB] HikariCP의 옵션  (0) 2021.03.31
[DB] Database Connection Pool이란  (0) 2021.01.04