본문 바로가기
1분 테크

Redis 너 누구야 ...?!!

by 1223v 2025. 1. 21.

Redis 란 무엇인가?

  • Remote Dictionary Server의 약자
  • 대용량 처리 관련 기술

 

 

 

Redis의 특징

  • 디스크가 아닌 메모리 기반(In-Memory data structure)의 데이터 저장소
  • NoSQL 과 Cache 솔루션이며 메모리 기반으로 구성
  • 명시적으로 삭제, Expire를 설정하지 않으면 데이터는 삭제되지 않는다.
    • (영구적 보존)
  • 여러대의 서버 구성이 가능
  • 데이터베이스, Cache 등으로 사용될 수 있는 기술
    • 메모리 위에서 동작하는 Key/Value 저장소인 Redis는 NoSQL DBMS로 분류
    • Memcached와 같은 인메모리 솔루션으로 분리
  • 성능은 서버에 따라 따르나 초당 2~10만회 수행 가능
  • 성능은 Memcached가 갖고 있는 좋은 점을 기반으로 만들어졌기 때문에 Memcached보다 우수하지만, 복잡함.
  • ⇒ 다양한 데이터 구조체를 지원 (Message Queue, Shared memory, Remote Dictionary)
  • 사용자들의 대규모 메시지를 실시간으로 처리하기 위해 사용

인메모리 캐시란?

  • 서비스 요청이 증가하여 DB요청이 많아지면 DB서버의 부하가 증가하게 된다.
    • → 이때, 메모리 캐시가 적용되면, 성능 및 처리 속도가 향상된다. [ 캐시 방식을 통해 DB Read의 부하를 감소시킬 수 있다. ]

 

 

 

 

 

 

Redis 보관 및 백업

  • Data Replication : 다른 서버의 메모리에 실시간으로 복사본을 저장하는 방법
  • Persistence : 디스크에 직접 저장하는 방법

 

 

 

 

 

NoSQL 중 Redis가 주목 받는 이유

  • 데이터 저장소로 입/출력이 가장 빠른 메모리를 채택
  • 단순한 구조의 데이터 모델인 Key-Value 방식을 통한 빠른 속도
  • 캐시 및 데이터 스토어에 유리
  • 다양한 API 지원

 

 

 

 

사용가능한 데이터형

  • String
  • Lists
  • Sets
  • Sorted Sets
  • Hashs

 

 

 

Redis 장점

 

리스트, 배열과 같은 데이터를 처리하는 유용

  • value 값으로 여러 데이터 형식을 지원한다
  • ( String, List, Set, Sorted Set, Hash 등)
  • 다양한 방식으로 데이터를 활용할 수 있음
  • 리스트형 데이터 입력과 삭제는 MySQL에 비해 10배 빠름

 

 

 

메모리를 활용하면서 영속적인 데이터 보존이 가능

  • 명령어로 명시적으로 삭제(Expires)를 설정하지 않으면 데이터가 삭제되지 않는다.
  • 디스크에 데이터를 기록하고 있기 때문에 Redis 메모리가 날라가도 데이터를 복구할 수 있다.
  • 스냅샷 기능을 제공하여 메모리 내용을 *.rdb 파일로 저장하여 해당 시점으로 복구할 수 있다.

 

Redis Server는 1개의 싱글 쓰레드로 수행되며, 서버 하나에 여러개의 서버를 띄우는 것이 가능

  • Master - Slave 형식으로 구성 가능 (데이터 분실 위험을 없애줌)
    • 실시간으로 데이터를 다른 서버에 복제한다.
    • Master Server가 Down되어도 Slave Server로 접속하면 바로 서비스를 계속할 수 있다.

 

 

 

Memcached 보다 다양한 API를 지원

  • 여러개의 캐시를 한번에 업데이트 해야하는 경우 Redis에서는 mset이라는 함수를 사용하면 됌
    • Memcached에서는 여러개의 캐시 데이터를 가져오는 것은 가능하지만, 여러개의 캐시 데이터를 업데이트하는 API는 지원하지 않는다.
    • 많은 양의 캐시를 업데이트를 해줘야 하는 상황에서 Memcached를 사용하면 업데이트를 해야하는 데이터 양 만큼 set API호출해야 함
    • ⇒ Redis : 데이터의 크기를 쪼개서 mset을 호출하면 Memcached로 동작할 때보다 빠른 시간안에 작업할 수 있다.

 

 

 

 

Redis의 단점

 

 

메모리 파편화가 발생하기 쉽다.

  • 메모리를 2배로 사용한다.
  • Redis는 싱글스레드이기 때문에 자식프로세스를 하나 만들어낸 이후, 새로 변경된 메모리 페이지를 복사해서 사용
  • Redis는 Copy-on-Write 방식을 사용
  • Redis는 데이터 변경이 잦기 때문에 실제 메모리 크기만큼 자식 프로세스가 복사
  • ⇒ 실제 필요한 메모리보다 더 많은 메모리 필요

 

 

 

대규모 데이터에 대한 응답속도의 불안정성

  • 대규모 트래픽으로 인해 많은 데이터가 업데이트 되면 Redis는 Memcached에 비해 속도가 불안정함
  • ⇒ Redis와 Memcached의 메모리 할당 구조가 다르기 때문에 발생하는 현상
  • Redis는 jemalloc을 사용하기 때문에 매번 malloc과 free를 통해서 메모리 할당이 이루어진다.
  • Memcached는 slab할당자를 이용하여 내부적으로 메모리를 재할당하지 않고 관리하는 형태를 취함

⇒ 메모리 파편화가 발생하여 이 할당 비용으로 응답속도가 느려진다.

 

 

 

 

 

CRUD에 따른 Redis 데이터 처리

  • Redis 서버는 Client에서 Read요청이 들어올때 메인 서버로부터 값을 가져와 저장
  • 이때 메인 서버와 싱크된 데이터 이외에 추가로 데이터 만료 시점을 처리하기 위해 현재 시간이나 만료시간을 함께 저장

 

Read 요청시

  1. Redis 서버에서 사용자가 요청한 데이터가 있는지 확인
  2. 데이터가 존재하는 경우 만료 여부 확인 후 정보 반환
  3. 정보를 반환한 시간을 현재로 업데이트 후 종료
  4. 데이터가 만료되었거나 없는 경우는 삭제후, 메인 서버에 요청
  5. 메인 서버로부터 데이터를 캐싱 및 DB 저장 후 이 값을 방문자에게 반환 후 종료

 

 

CUD 요청시

  • 데이터의 변화가 생겼을때 해당 값의 데이터는 캐싱값이 아닌 현재 실시간 정보를 보내줘야함
  • ⇒ 방문자의 CUD를 메인 서버에 요청
  • ⇒ 메인 서버는 요청받은 CUD 작업을 반영 및 업데이트
  • ⇒ 변경되기 전에 데이터 값을 Redis에서 찾아 삭제 후 종료

 

 

Redis vs Memcached

  • Memcached 는 캐시 솔루션
  • 저장소 개념이 추가된 것이 Redis
  • 캐시는 빠른 속도를 위해 어떤 결과를 저장해두는 것을 의미 ⇒ 데이터가 사라지면 다시 만들 수 있음의 전제를 두고 있음
  • 캐시 기능만 고려한다면 디스크에서 불러오기만 하면 된다. (=load 기능만 수행되면 된다.)
  • 단, 저장소라는 개념이 추가되면 데이터가 유지되어야한다는 특성을 가지게 된다.
    • (=Save기능도 필요)

 

 

 

요약

메모리가 날라가도 원본데이터로 즉시 복구할 수 있는 데이터는 Memcached를 사용하는 편이 좋을 수 있다.

메모리가 날라가면 서비스 장애가 발생할 수 있는 상황이라면 Redis를 사용하는 편이 좋을 수 있다.

통신 속도를 향상시키기 위한 목적이면 Memcached를 사용하는 것이 좋다.

그러나 서비스의 특정 기능을 위한 목적으로 캐시 데이터를 사용하면, Redis 사용하는 것이 좋다.

'1분 테크' 카테고리의 다른 글

Redis 분산락(Redlock)  (0) 2025.02.14
Enum  (0) 2024.06.25
전략패턴(Strategy) 패턴  (0) 2024.06.10
싱글톤(Singleton) 패턴  (0) 2024.05.31
정규화(Normalization)  (0) 2024.03.31

댓글