레디스(REmote DIctionary Server, Redis)

문지원(JiwonMoon)·2023년 1월 18일
0
post-thumbnail

캐시 서버(Cache Server)란?

데이터 베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않는다. 하지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 느려질 수 있다.

일반적으로 서비스 운영 초반이거나 규모가 작은, 사용자가 많지 않은 서비스의 경우에는 WEB - WAS - DB 의 구조로도 데이터 베이스에 무리가 가지 않는다.

하지만 사용자가 늘어난다면 데이터 베이스가 과부하 될 수 있기 때문에 캐시 서버를 도입해야 한다.

즉, 캐시를 생성하여 액세스 시간을 줄이고 처리량을 늘려서 DB에 부담을 줄이는 역할을 한다.

Redis(REmote DIctionary Server) 란?

Key, Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터 베이스 관리 시스템 (DBMS)

DB, Cache, 메세지 브로커 등의 용도로 사용되며, 인메모리 데이터 구조를 가진 저장소

  • db-engines.com 에서 key, value 저장소 중 가장 순위가 높다.

Redis 특징 및 장단점

  1. 인 메모리 데이터 구조 : 디스크가 아닌 메모리 기반으로 한 데이터 구조 안에 다양한 데이터 구조들이 있다. List, Set, Hash, Map 등의 유형들을 인 메모리 안에 저장 할 수 있다.

  2. 디스크에서 데이터를 저장한 것과는 달리 서버의 주메모리에 저장하여 디스크에 액세스 해야할 필요를 없애서 검색 시간으로 인한 지연을 방지하고 CPU명령을 적게 사용하는 좀 더 간단한 알고리즘으로 데이터에 액세스할 수 있다.

  3. 개발과 운영을 좀 더 쉽게 할 수 있으며, Pub/Sub 사용하여 멩시징 시스템에 유용하며 불필요한 데이터를 채우지 않게하는 데 유용하다.

  4. 캐시를 사용하여 속도가 빠르고 정보가 사라지지 않는다

  5. 다수 언어를 지원한다.

Redis 장점

  1. 리스트, 배열과 같은 데이터를 처리하는데 유용하다.
    • String, List, Set, Sorted set, Hash 등
    • MySQL에 비해서 10배 정도 빠르다고 한다.
  2. 메모리를 활용하면서 영속적인 데이터 보존이 가능하다.
    • 명령어로 명시적으로 삭제(Expires)를 설정하지 않으면 데이터가 삭제되지 않는다.
    • 디스크에 데이터를 기록하고 있기 때문에 메모리가 날라가도 데이터를 복구할 수 있다.
  3. 서버 하나에 여러개의 서버를 띄우는 것이 가능하다.
    • Master - Slave 형식으로 구성이 가능하다.
    • Master Sserver가 Down 되어도 Slave Server로 접속하면 바로 서비스를 계속할 수 있다.
  4. Memcached 보다 다양한 API를 지원한다.
    • Memcached에서는 여러개의 캐시 데이터를 가져오는건 가능하지만, 여러개의 캐시 데이터를 업데이트하는 API는 지원하지 않는다.
    • Memcached를 사용하면 업데이트 해야하는 데이터 양만큼 set API를 호출해야 한다.

Redis 단점

  1. 더 많은 메모리를 사용하게 된다.
    • 실제로 필요한 메모리 양보다 더 많은 메모리를 사용하게 된다.
  2. 대규모 데이터에 대한 응답속도의 불안정성
    • 대규모 트래픽으로 인해 많은 데이터가 업데이트되면
    • Redis는 Memcached에 비해서 속도가 불안정하다.

Redis 사용 사례

캐싱

다른 DB "앞"에 배치된 레디스는 성능ㅇ이 뛰어난 인 메모리 캐시를 생성하여 액세스 지연 시간을 줄이고, 처리량을 늘리며 관계형 또는 NoSQL DB의 부담을 줄여준다.

세션관리

레디스는 세션 관리 작업에 매우 적합하다. 레디스는 세션 키에 대한 적절한 TTL과 함꼐 빠른 키 값 스토어로 사용하면 간단하게 세션 정보를 관리할 수 있다.
세션 관리는 주로 게임, 전자 상거래 웹 사이트, 소셜 미디어 플랫폼을 비롯한 온라인 애플리케이션에 필요하다.

실시간 순위표

Redis Sorted Set 데이터 구조를 사용하면 요소가 목록에 유지되고 점수에 따라 정렬된다. 이를 통해 손쉽게 동적 순위표를 생성하여 게임에서 앞서있는 사람이 누구인지 보여주거나, 좋아요를 가장 많이 받은 메시지를 게시하거나, 선두에 있는 사람이 누구인지 보여주려는 다양한 사례에 사용할 수 있다.

속도 제한

Redis는 이벤트 속도를 측정하고 필요한 경우 제한할 수 있다. 클라이언트의 API 키에 연결된 Redis 카운터를 사용하여 특정 기간 동안 액세스 요청의 수를 세고 한도가 초과되는 경우 조치를 취할 수 있습니다. 속도 제한기는 포럼의 게시물 수를 제한하고, 리소스 사용량을 제한하며, 스패머의 영향을 억제하는 데 주로 사용됩니다.

대기열

Redis List 데이터 구조를 사용하면 간단한 영구 대기열을 손쉽게 구현할 수 있습니다. Redis List는 자동 작업 및 차단 기능을 제공하므로 신뢰할 수 있는 메시지 브로커 또는 순환 목록이 필요한 다양한 애플리케이션에 적합합니다.

채팅 및 메시징

Redis에서는 패턴 매칭과 더불어 PUB/SUB 표준을 지원합니다. 따라서 Redis를 사용하여 고성능 채팅방, 실시간 코멘트 스트림 및 서버 상호 통신을 지원할 수 있습니다. 또한 PUB/SUB를 사용하여 게시된 이벤트를 기반으로 작업을 트리거할 수 있습니다.

References (참고 자료)

0개의 댓글