나의개발일지

DataBase) Redis 본문

Back-End/DataBase

DataBase) Redis

아. 이렇게 하면 될거 같은데.. 2024. 8. 16. 14:37
728x90



Redis

Redis란?

속도를 빠르게 하기 위한 캐시 솔루션

NoSQL의 Key-Value 스토어

두가지의 공통적인 특징이 사용하기 쉽고 속도가 빠르다는 것이다.

Redis의 주요 특징

항목 내용
Key-Value 스토어 단순 스트링에 대한 Key/Value 구조를 지원
컬렉션 지원 List, Set, Sorted Set, Hash 등의 자료 구조를 지원
Pub/ Sub 지원 Publish/ Subscribe 모델을 지원
디스크 저장 현재 메모리 상태를 디스크로 저장할 수 있는 기능과 현재 까지의 업데이트 관련 명령을 저장할 수 있는 AOF 기능이 있다
복제 다른 노드에서 해당 내용을 복제할 수 있는 마스터/슬레이브 구조를 지원한다.
빠른 속도 이상의 기능들을 지원하면서도 초당 100,000 QPS 수준의 높은 성능을 자랑한다.

Key-Value 스토어

기본적으로 Redis는 Key-Value 형태의 데이터 저장소다.

[예시]

set id:username " username"
set id:email test@test.com
get id:username

Redis 빌드해서 사용하기

Redis를 사용하려면 빌드가 필수적이다.


Redis 운영과 관리

싱글스레드

하나의 명령이 오랜 시간을 소모하는 작업에는 적합하지 않음

주의사항

  1. 서버에서는 keys 명령을 사용하지 않기
    keys 명령 : 현재 서버에 저장된 Key 목록을 볼 수 있는 명령어
  2. flushall/ flushdb 명령 주의하기
    모든 데이터를 삭제하는 명령인 flushall/flushdb는 사용에 주의해야 한다.
    Redis는 db라는 가상의 공간을 분리할 수 있는 개념을 제공하고 select 명령으로 이동할 수 있다.
    flushdb : db하나의 모든 내용을 지우기
    flushall : 모든 내용 지우기
    => 데이터를 일일이 지우기 때문에 많은 시간 소요

Redis Persistent

Redis의 데이터를 디스크로 저장할 수 있는 기능 => 다시 복구 가능

RDB
현재 메모리에 대한 덤프를 생성하는 기능 => 싱글 스레드에 영향을 미치지 않음 (fork해서 자식프로세스를 생성하여 메모리를 복제하기 때문)

RDB를 사용하려면 redis.conf 에 내용 추가

dbfilename dump.rdb

RDB 저장 명령

  1. SAVE
    모든 작업을 멈추고 현재 메모리 상태에 대한 RDB 파일을 생성한다. = 해당 시간동안 작업 X
save 900 1     // 900초 안에 1번이라도 변경이 있을때
save 300 10    // 300초 안에 10번의 변경이 있을때
save 60 10000  // 60초 안에 10000번의 변경이 있을떄
  1. BGSAVE
    자식 프로세스를 생성하는 fork 작업을 통해 자식 프로세스에서 RDB 파일을 저장한다.

AOF (Append Only File)
데이터를 저장하기 전에 AOF 파일에 현재 수행해야 할 명령을 미리 저장해두고, 장애가 발생하면 AOF를 기반으로 복구한다. 즉, 다음과 같은 순서로 데이터가 저장된다.

  1. 클라이언트가 Redis에 업데이트 관련 명령요청
  2. Redis는 해당 명령을 AOF에 저장
  3. 파일 쓰기가 완료되면 실제로 해당 명령을 실행해서 메모리의 내용을 변경한다.

% AOF와 RDB는 모두 Redis에서 Persistent를 구현하는 방법
특정 시점을 기준으로 한 스냅샷인 RDB와 달리 AOF는 항상 메모리에 반영하기 직전에 쓰기 때문에 AOF가 우선순위가 높다.
RDB는 데이터 유실 가능성이 있지만 AOF는 모든 데이터가 디스크에 남아있다.

AOF 사용

appendonly yes
appendfilename appendonly.aof
appendfsync everysec

 

728x90
반응형