Redis란 무엇일까?

Ena JJJ·2023년 2월 7일
1

DB

목록 보기
2/4

Redis란 무엇일까?

Redis는 Memcached와 비슷한 캐시 시스템으로서 동일한 기능을 제공하면서 영속성, 다양한 데이터 구조와 같은 부가적인 기능을 지원하고 있다. 레디스는 모든 데이터를 메모리에 저장하고 조회한다. 즉, 인메모리 데이터베이스이다.

    1. 다양한 자료구조
      이렇게 다양한 자료구조를 지원하게 되면 개발의 편의성이 좋아지고 난이도 낮아진다. 어떤 데이터를 정렬을 해야하는 상황이 있을 때, DBMS를 이용한다면 DB에 데이터를 저장하고, 저장된 데이터를 정렬하여 다시 읽어오는 과정은 디스크에 직접 접근을 해야하기 때문에 시간이 더 걸린다는 단점이 있다. 하지만 이 때 In-Memory 데이터베이스인 Redis를 이용하고 레디스에서 제공하는 Sorted-set이라는 자료구조를 사용하면 더 빠르고 간단하게 데이터를 정렬할 수 있다.

NoSQL로서 Key-Value 타입의 저장소인 Redis(Redis, Remote Dictionary Server)의 주요 특징은 다음과 같다.

  • 영속성을 지원하는 인메모리 데이터 저장소
  • 읽기 성능 증대를 위한 서버 측 복제를 지원
  • 쓰기 성능 증대를 위한 클라이언트 측 Sharding 지원
  • 다양한 서비스에서 사용되며 검증된 기술
  • string, list, hash, set, sortedset 과 같은 다양한 데이터형을 지원. 메모리 저장소임에도 불구하고 많은 데이터형을 지원하므로 다양한 기능 구현이 가능하다.

Redis는 고성능 키-밸류 저장소로서 문자열, 리스트, 해시 등의 형식들을 지원하는 NoSQL이다.

Redis의 영속성

Redis는 지속성을 보장하기 위해 데이터를 DISK에 저장할 수 있다. 서버가 내려가더라도 DISK에 저장된 데이터를 읽어서 메모리에 로딩한다.

데이터를 DISK에 저장하는 방식은 크게 두 가지 방식이 있다.

  • RDB(Snapshotting) 방식
    -순간적으로 메모리에 있는 내용을 DISK에 전체를 옮겨 담는 방식
  • AOF(Append On File) 방식
    -Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태

Redis 특징

  • Key,Value 구조이기 때문에 쿼리를 사용할 필요가 없다.
  • 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠르다
  • String, Lists, Sets, Sorted Sets, Hashes 자료구조를 사용한다
  • Single Threaded 이다
    -한번에 하나의 명령만 처리할 수 있다. 그렇기 때문에 중간에 처리 시간이 긴 명령이 들어오면 그 뒤에 명령어들은 모두 앞에 있는 명령어가 처리될 때까지 대기가 필요하다. (하지만 get, set 명령어의 경우 초당 10만개 이상 처리할 수 있을 만큼 빠르다)

주의점

  • 서버에 장애가 발생했을 경우 그에 대한 운영 플랜이 꼭 필요하다.
    -인메모리 데이터 저장소의 특성상, 서버에 장애가 발생했을 경우 데이터 유실이 발생할 수 있기 때문이다.
  • 메모리 관리가 중요하다
  • 싱글 스레드 특성상, 한 번에 하나의 명령만 처리할 수 있다. 처리하는데 시간이 오래 걸리는 요청, 명령은 피해야 한다

이외에도 Master-Slave 형식의 데이터 이중화 구조에 대한 Redis Replication, 분산 처리를 위한 Redis cluster, 장애 복구 시스템 Redis Sentinel, Redis Topology, Redis Sharding, Redis Failover 등의 Redis를 더 효율적으로 사용하기 위한 개념들이 존재한다.


Redis 실습

brew install redis(Redis 설치)
redis-server (Redis Server 실행)
redis-cli (redis Client 접속)

brew services start redis   (Redis 서비스 실행)
brew services stop redis    (Redis 서비스 중지)
brew services restart redis (Redis 서비스 재시작)

flushAll (Redis 모든 Key 삭제)



0개의 댓글