[NoSQL] Redis란?

2025. 10. 17. 22:26·Development/개발 공부

Redis란?

Redis는 인메모리 기반의 Key-Value NoSQL 데이터베이스이다.

인메모리 데이터베이스는 데이터를 RAM에 저장하기 때문에 접근 속도가 빠르다. 하지만 프로세스가 종료될 시, 데이터가 휘발될 수 있다.

때문에, 휘발되더라도 큰 문제가 없는 캐시(Cache)나 실시간 데이터 처리 용도로 많이 사용된다.

 


Redis 특징

1. 영속성(Persistence)이라는 기능을 제공해 데이터가 휘발되는 것을 방지할 수 있다.

 

Redis는 기본적으로 데이터가 유실될 수 있다.

하지만 스냅샷(SnapShot·RDB)과 AOF를 통해 데이터 유실을 방지할 수 있다.

 

스냅샷(SnapShot·RDB)은 특정 시점마다 전체 데이터를 디스크에 저장한다.

하지만 이 방식도 데이터는 유실될 수 있다.(스냅샷 사이에 시스템 장애가 발생하면, 휘발될 수 있기 때문.)

 

AOF는 모든 명령어를 로그 파일에 순차적으로 저장하고, Redis를 재시작할 시 로그 파일을 실행해 데이터를 복구한다.

스냅샷보다 데이터 유실 위험은 적지만, 파일의 크기가 커질수록 복구 시간이 오래 걸린다.

 

2. Master-Slave 구조로 고가용성과 읽기 Scale-out을 보장한다.

 

Redis는 Master의 데이터를 여러 개의 Slave로 복제(Replication)하는 Master-Slave 구조이다.

Redis의 쓰기 작업은 Master에서, 읽기 작업은 Master와 Slave을 나누어서 수행한다.

따라서 읽기 성능에 대한 Scale-out(수평 확장)을 보장한다.

 

고가용성(High Availability)이란 지속적으로 작업을 이어갈 수 있는 성질을 의미한다.

따라서 Master가 장애 시, Slave를 Master로 승격시켜 서비스를 유지시킨다.

 

 

 

3. 클러스터(Cluster) 구조로 샤딩 기반 Scale-out을 지원한다.

 

Redis는 샤딩(대규모 데이터를 여러 서버에 나누어 저장하는 기술)을 기반으로 데이터를 분산 저장하는 클러스터 구조를 가진다.

따라서 전체 데이터 공간을 16,384개의 해시 슬롯으로 나누어 여러 Master 노드에 균등하게 분배한다.

 

 

 

※ 복제는 같은 데이터를 복제하는 것이고, 분산은 데이터를 쪼개서 저장하는 것이다.

 


 

Redis 데이터 구조

Redis는 key-value를 기반으로 하며, String / Hash / List / Set / Sorted Set 등 다양한 자료구조를 값으로 지원한다.

 

1. String

String 자료구조는 텍스트, 직렬화된 객체, 바이너리 배열의 단일 값을 저장한다.

 

키와 값 저장: set key value

키와 값 조회: get key

 

2. Hash

Hash 자료구조는 field(Hash 키, Redis 데이터 구조의 그 키 아님!!)-value들의 집합을 저장한다.

 

키와 key-value 쌍 저장: hset key field1 value1 field2 value2

키에서 field로 value 조회: hget key field1 → value1

키에서 field 삭제: hdel key field1

 

3. List

List 자료구조는 순서가 있는 값의 목록을 저장한다.

Linked List로 구현되기 때문에 삽입·삭제 성능은 O(1)로 빠르지만, 조회 성능은 O(N)으로 느리다.

 

키와 목록 head(인덱스 0)에 저장: lpush key value

키와 목록 tail(인덱스 N - 1)에 저장: rpush key value

List의 head 삭제: lpop key

List의 tail 삭제: rpop key

 

이외에도 LLEN, LMOVE, LRANGE, LTRIM 등이 있다.

 

4. Set

Set 자료구조는 순서가 없는 String 집합을 저장한다.

 

키에 새로운 값 추가: sadd key value

키에서 값 제거: srem key value

키에서의 값 목록 조회: smembers key

키에 값이 있는지 확인: sismember key 

 

5. Sorted Set

Sorted Set 자료구조는 score로 정렬된 멤버들의 집합을 저장한다.

 

키에 멤버(score, value) 추가: zadd key score1 member1 score2 member2

키에서 주어진 범위의 오름차순으로 정렬된 멤버 목록 조회: zrange key start stop

키에서 주어진 범위의 내림차순으로 정렬된 멤버 목록 조회: zrevrange key start stop

키에서 오름차순으로 정렬된 멤버 목록에서 특정 멤버 순위 조회: zrank key member

키에서 내림차순으로 정렬된 멤버 목록에서 특정 멤버 순위 조회: zrevrank key member

키에 있는 멤버 개수 조회: zcard key

 

👏

 

참고

https://www.elancer.co.kr/blog/detail/768

https://ksh-coding.tistory.com/154

'Development > 개발 공부' 카테고리의 다른 글

[Git] 깃 브랜치 전략(Git Flow, Github Flow)(+TBD)  (0) 2025.12.14
AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)  (0) 2025.11.10
[Test] Mock을 이용한 단위 테스트(with Mockito)  (0) 2025.10.01
[Test] Stub을 이용한 단위 테스트(with JUnit)  (0) 2025.09.30
[Test] 단위 테스트(Unit Test)  (0) 2025.09.27
'Development/개발 공부' 카테고리의 다른 글
  • [Git] 깃 브랜치 전략(Git Flow, Github Flow)(+TBD)
  • AOP(Aspect Oriented Programming, 관점 지향 프로그래밍)
  • [Test] Mock을 이용한 단위 테스트(with Mockito)
  • [Test] Stub을 이용한 단위 테스트(with JUnit)
jjangsudiary
jjangsudiary
jjangsudiary 님의 블로그 입니다.
  • jjangsudiary
    jjangsudiary 님의 블로그
    jjangsudiary
  • 전체
    오늘
    어제
    • 분류 전체보기 (81) N
      • 이모저모 (0)
        • 회고 (0)
      • Development (17) N
        • 개발 공부 (14) N
        • 프로젝트 (2)
      • Android (10)
        • Compose (1)
      • AI (15)
      • Computer Science (25)
        • 네트워크 (8)
        • 데이터베이스 (10)
        • 운영체제 (6)
        • 자료구조 (0)
        • 컴퓨터구조 (1)
      • Java (9)
        • 디자인패턴 (2)
      • Spring (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    안드로이드
    Ai
    코딩 테스트
    TensorFlow
    머신러닝
    android
    os
    인공지능
    딥러닝
    db
    자바
    java
    백준
    CS
    파이썬
    database
    운영체제
    baekjoon
    프로그래머스
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
jjangsudiary
[NoSQL] Redis란?
상단으로

티스토리툴바