dalgorithm
달공의 개발기
dalgorithm
전체 방문자
오늘
어제
  • 분류 전체보기 (170)
    • Back-end (0)
    • Java (11)
    • 자료구조 (7)
    • Network (31)
    • Database (9)
    • Baekjoon Online (24)
    • 클라우드 (6)
    • Android (15)
      • Kotlin (14)
    • AI (27)
      • Machine Learning&Deep Learn.. (27)
    • Web (23)
      • Webhacking (17)
      • WebProgramming (6)
    • 기술면접 (1)
      • JAVA&자료구조 (0)
      • Spring (0)
      • 컴퓨터구조&운영체제 (0)
      • 네트워크 (0)
      • 데이터베이스 (0)
    • CTF 스터디 (15)
    • 대외활동 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • cs
  • 침입탐지
  • java
  • 딥러닝
  • 웹해킹
  • kotlin
  • 네트워크
  • Guacamole
  • CTF
  • db
  • gcp
  • 포너블
  • 클라우드
  • 자바
  • 머신러닝
  • 데이터베이스
  • python #백준
  • 자료구조
  • 코드리뷰
  • 인공지능

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dalgorithm

달공의 개발기

[DB] Redis 레디스
Database

[DB] Redis 레디스

2022. 10. 12. 14:55
728x90

 


Redis란?

 

REDIS(Remote Dictionary Server)는 메모리 기반의 “키-값” 구조 데이터 관리 시스템이며,
모든 데이터를 메모리에 저장하고 조회하기에 빠른 Read, Write 속도를 보장하는 비관계형 데이터베이스(NoSQL)이다.

 

레디스는 크게 5가지< String, Set, Sorted Set, Hash, List >의 데이터 형식을 지원한다.
Redis는 빠른 오픈 소스 인 메모리 키-값 데이터 구조 스토어이며, 다양한 인 메모리 데이터 구조 집합을 제공하므로 사용자 정의 애플리케이션을 손쉽게 생성할 수 있다.

 

 

 Redis 특징

 

NoSQL로서 Key-Value 타입의 저장소인 Redis의 주요 특징은 아래와 같다.

  • 영속성을 지원하는 인메모리 데이터 저장소
    • 다양한 자료 구조를 지원함
    • 싱글 스레드 방식으로 인해 연산을 원자적으로 수행 가능
  • 읽기 성능 증대를 위한 서버 측 복제를 지원
  • 쓰기 성능 증대를 위한 클라이언트 측 샤딩(Sharding) 지원
  • 다양한 서비스에서 사용되며 검증된 기술
  • 문자열, 리스트, 해시, 셋, 정렬된 셋과 같은 다양한 데이터형을 지원. 메모리 저장소임에도 불구하고 많은 데이터형을 지원하므로 다양한 기능을 구현

 

 Redis의 영속성

 

Redis는 지속성을 보장하기 위해 데이터를 disk에 저장할 수 있다.

서버가 내려가더라도 disk에 저장된 데이터를 읽어서 메모리에 로딩한다.

 

|  RDB (Snapshotting) 방식

  • 순간적으로 메모리에 있는 내용을 disk에 전체를 옮겨 담는 방식

 

|  AOF (Append On File) 방식

  • Redis의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 형태

 

 

 Redis의 싱글 스레드

 

레디스는 Event Loop(이벤트루프)를 이용하여 요청을 수행한다.

즉, 실제 명령에 대한 작업은 커널 I/O 레벨에서 Multiplexing(멀티플렉싱)을 통해 처리하여 동시성을 보장한다.

따라서, 유저 레벨에서는 싱글스레드로 동작하지만, 커널 I/O 레벨에서는 스레드풀을 이용한다.

 

++ 맴캐시드 또한 메모리 객체 시스템인데, 멀티 스레드를 지원하고 스케일 업을 통해 다중 작업 처리가 가능하다.  또한, 맴캐시드는 문자열만 지원한다. 

 

|  레디스가 싱글스레드인 4가지 이유

  • CPU는 병목현상의 원인이 아니다.
    • Redis의 병목현상의 대부분은 cpu가 아닌 시스템 메로리/네트워크 대역폭에서 발생
  • 동시성 보장
    • 이벤트 루프 패턴을 통해 동시성 구현하고, Context-Switch(문맥교환)가 없어 자원 절약
  • 쉬운 구현 (프로그래밍 용이성)
  • 쉬운 배포
    • 최소 1개의 Core만 있어도 사용할 수 있기 때문에 배포 및 사용이 용이하다.

참고 

| https://devlog-wjdrbs96.tistory.com/374

| https://crazy-horse.tistory.com/m/113

| https://velog.io/@courage331/Redis

728x90

'Database' 카테고리의 다른 글

[MySQL] WITH, WITH RECURSIVE 사용법  (0) 2022.10.10
[DB] Transaction 트랜잭션  (0) 2022.10.10
[DB] 정규화 & 비정규화  (0) 2022.10.07
[DB] Index & B-Tree  (2) 2022.10.05
[DB] SQL vs NoSQL  (4) 2022.10.03
    'Database' 카테고리의 다른 글
    • [MySQL] WITH, WITH RECURSIVE 사용법
    • [DB] Transaction 트랜잭션
    • [DB] 정규화 & 비정규화
    • [DB] Index & B-Tree
    dalgorithm
    dalgorithm

    티스토리툴바