[Redis] Redis에 대하여

젤리젤링텀·2024년 11월 12일

Redis

목록 보기
1/1
post-thumbnail

Redis?

Remote Dictionary Server의 약자로, 다수의 서버가 공유하는 해시 테이블

모든 데이터를 메모리에 저장하고 조회하는 인메모리 데이터베이스(In-memory DB)이며, Key-Value 구조의 비관계형(NoSQL) 데이터베이스 관리 시스템이다.

별도의 쿼리문이 필요하지 않고, 디스크가 아닌 메모리 기반의 데이터 저장소이기 때문에 데이터에 접근하는 속도가 빠르지만, 휘발성이라는 것에 유의해야 한다.

데이터베이스가 존재하는데도 Redis라는 인메모리 DB를 사용하는 이유는 무엇일까?
데이터베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생하더라도 데이터가 손실되지 않는다.

하지만 매번 디스크에 접근해야하기 때문에 사용자가 많아질수록 부하가 많아져서 느려질 수 있다. 일반적으로 서비스 운영 초반이거나 규모가 작고, 사용자가 많지 않은 서비스의 경우 WEB - WAS - DB의 구조로도 데이터베이스에 무리가 가지 않는다.

하지만 사용자가 늘어난다면 데이터베이스에 과부하가 걸릴 수 있기 때문에 캐시 서버를 사용하는 것이며, 이 캐시 서버로 사용할 수 있는 것이 바로 Redis 이다.

한번 읽어온 데이터를 캐시에 저장하기 때문에, 같은 요청이 여러 번 들어오는 경우 데이터베이스에 접근하기 전에 캐시에서 응답해주므로 DB의 부하를 줄이고 속도를 높여준다.

Redis의 특징

  • Key-Value 구조. -> 쿼리를 사용할 필요가 없다.
  • 데이터를 디스크가 아닌 메모리에 쓰기 때문에 처리속도가 빠르다.
  • String, List, Set, Sorted Set, Hash의 데이터 형식을 지원한다.
  • 코어 스레드가 Single Threaded라서 한 번에 하나의 명령만 처리할 수 있다.
    - 멀티 스레드 환경이 아니라 Context Switch, DeadLock이 발생하지 않는다.
    - 중간에 처리 시간이 긴 명령이 들어오면 그 뒤에 명령들은 앞에 있는 명령이 처리될 때까지 대기 해야한다.
  • 입력과 삭제가 정말 빠르다.
  • Redis에 저장되는 데이터에 유효기간을 설정할 수 있다.

Redis의 영속성

Redis는 데이터의 휘발성을 보완하기 위해 데이터에 영속성을 제공한다. 즉, 메모리에 있는 데이터를 디스크에 백업하는 기능을 제공한다.

1. RDB(Redis Database)

  • 특정 시간에 스냅샷을 생성하는 기술. 장애가 발생했을 때 특정 시점에 스냅샷으로 빠르게 캐시를 되돌리거나 동일한 데이터를 가진 캐시를 복제할 때 주로 사용된다.
  • 스냅샷의 특성상 스냅샷이 생성되기 이전의 일부 데이터나, 스냅샷 이후 변경된 데이터는 유실 위험이 있다.

일부 데이터 손실에 영향을 받지 않는 경우(캐시로만 사용할 때)에 사용한다.


2. AOF(Append Only File)

  • Redis에서의 Write 작업(데이터 생성, 수정, 삭제...)을 모두 Log로 작성하는 방식이다.
  • 모든 데이터의 변경 기록들을 보관하고 있으므로 최신 데이터 정보를 백업 가능하다.
  • RDB 방식보다 데이터의 유실량이 적지만, 로딩 속도가 느리고 파일의 크기가 큰 것이 단점이다.

장애 상황 직전까지의 모든 데이터가 보장되어야 할 경우 사용한다.


Redis는 일반적으로 RDB와 AOF를 동시에 사용하여 데이터를 백업한다.

Redis 사용처

방문자 수 조회 (String)
인증 토큰 저장 (String 또는 Hash)
게임 등의 랭킹 보드 (Sorted Set)
휴먼유저 개인정보 삭제 (Sorted Set)
이메일 인증 기능

참고문헌
https://wildeveloperetrain.tistory.com/21
https://velog.io/@banggeunho/레디스Redis-알고-쓰자.-정의-저장방식-아키텍처-자료구조-유효-기간
https://velog.io/@dodozee/Redis
https://velog.io/@j3beom/SpringBoot-Redis-Redis를-활용한-Caching-기본-및-활용-예제
https://ksh-coding.tistory.com/154#1-2.%20Strings%20%ED%99%9C%EC%9A%A9%20%EC%98%88%EC%8B%9C-1

profile
열심히 살자

0개의 댓글