article thumbnail image
Published 2022. 5. 31. 09:07

프로젝트 중 웹소켓 구현 구분에서 redis를 사용할 일이 있어서 찾아본 정보를 기록합니다.

 

레디스(Redis)

Redis는 Memcached와 비슷한 캐시 시스템으로서 동일한 기능을 제공하면서 영속성, 다양한 데이터 구조와 같은 부가적인 기능을 지원하고 있습니다. 레디스는 모든 데이터를 메모리에 저장하고 조회합니다. 즉, 인메모리 데이터베이스 입니다. 이 말만 들으면 Redis에 모든 데이터를 메모리에 저장하는 빠른 DB가 다라고 생각할지도 모릅니다. 하지만 빠른 성능은 레디스의 특징 중 일부분 입니다. 다른 인메모리 디비들과의 가장 큰 차이점은 레디스의 다양한 자료구조 입니다.

이렇게 다양한 자료구조를 지원하게 되면 개발의 편의성이 좋아지고 난이도가 낮아진다는 장점이 있습니다.

예를들어, 어떤 데이터를 정렬을 해야하는 상황이 있을 때, DBMS를 이용한다면 DB에 데이터를 저장하고, 저장된 데이터를 정렬하여 다시 읽어오는 과정은 디스크에 직접 접근을 해야하기 때문에 시간이 더 걸린다는 단점이 있습니다. 하지만 이 때 In-Memory 데이터베이스인 Redis를 이용하고 레디스에서 제공하는 Sorted-Set이라는 자료구조를 사용하면 더 빠르고 간단하게 데이터를 정렬할 수 있습니다.

 

NoSQL로서 Key-Value 타입의 저장소인 레디스(Redis, Remote Dictionary Server)의 주요 특징은 아래와 같습니다.

  • 영속성을 지원하는 인메모리 데이터 저장소
  • 읽기 성능 증대를 위한 서버 측 복제를 지원
  • 쓰기 성능 증대를 위한 클라이언트 측 샤딩(Sharding) 지원
  • 다양한 서비스에서 사용되며 검증된 기술
  • 문자열, 리스트, 해시, 셋, 정렬된 셋과 같은 다양한 데이터형을 지원. 메모리 저장소임에도 불구하고 많은 데이터형을 지원하므로 다양한 기능을 구현

 

그래서 최종적으로 Redis를 한 문장으로 정의하면 아래와 같습니다.

레디스는 고성능 키-값 저장소로서 문자열, 리스트, 해시, 셋, 정렬된 셋 형식의 데이터를 지원하는 NoSQL이다.

레디스가 지원하는 데이터 형식

• 문자열(string) – 최대 512MB 크기의 텍스트 또는 바이너리 데이터

• 목록(list) – 추가된 순서가 유지되는 문자열 모음

• 세트(set) – 순서가 유지되지 않는 문자열 모음으로 다른 세트 유형과 교차, 통합 및 비교 가능

• 정렬된 세트(ordered set) – 값을 기준으로 순서가 지정된 세트

• 해시(hash) – 필드 및 값의 목록을 저장하는 데이터 구조

• 스트림(stream)

• 이진화된 파일(binary file)

• 비트맵 – 비트 수준 작업을 제공하는 데이터 유형

• HyperLogLogs – 데이터 세트 내 고유 항목을 추정하기 위한 확률적 데이터 구조

레디스 장단점

Redis의 장점

  • 리스트, 배열과 같은 데이터를 처리하는데 유용
  • value 값으로 다양한 데이터 형식을 지원하기 때문
  • 리스트형 데이터 입력과 삭제가 MySql에 비해 10배정도 빠르다.
  • 여러 프로세스에서 동시에 같은 key에 대한 갱신을 요청하는 경우, 데이터 부정합 방지 Atomic 처리 함수를 제공한다(원자성).
  • 메모리를 활용하면서 영속적인 데이터 보존(Persistence)스냅샷 기능을 제공해 메모리 내용을 *.rdb 파일로 저장하여 해당 시점으로 복구할 수 있다.
  • AOF : Redis의 모든 Wirte/Update 연산을 log 파일에 기록 후 서버 재시작 시 순차적으로 재실행, 데이터 복구
  • 명령어로 명시적 삭제, expires를 설정하지 않으면 데이터가 삭제되지 않는다.
  • 1개의 싱글 쓰레드로 수행되기 때문에, 서버 하나에 여러개의 Redis Server를 띄울 수 있다.(Master-Slave 구조)
  • master-slave 간의 복제는 non-blocking

Redis 단점

In-memory 방식이기 때문에 장애 발생시 데이터 유실이 발생한다.

따라서 영속적인 데이터 보존을 위해 스냅샷과 AOF 기능을 통한 복구 방식을 주의해서 작성해야 데이터 유실에 대비할 수 있다.

 

 

redis ubuntu 설치가 궁금하시면 지난 게시글 확인해주세요.

https://jemoo1060.tistory.com/54

 

ubuntu에 redis 설치하기

프로젝트에 redis를 적용할 기회가 있어 설치법 기록 해둡니다. 우분투 패키지를 업데이트 합니다 sudo apt-get update redis를 설치합니다.  (설치중에 Y 한번 입력하면 됩니다.) sudo apt-get install redis-se..

jemoo1060.tistory.com

 

출처 : https://devlog-wjdrbs96.tistory.com/374

출처 : https://n1tjrgns.tistory.com/282

출처 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sehyunfa&logNo=221660349078

출처 : https://steady-coding.tistory.com/586

출처 : https://n1tjrgns.tistory.com/282

 

 

'CS' 카테고리의 다른 글

스프링 AOP란  (0) 2022.05.26
CORS란  (0) 2022.05.25
JWT(Json Web Token)  (0) 2022.05.23
HTTPS  (0) 2022.05.21
MVC란?  (0) 2022.04.03
복사했습니다!