Database

인메모리 데이터베이스(Redis)

hjkang

인메모리 데이터베이스

  • 디스크가 아닌 주 메모리에 모든 데이터를 보유하고 있는 데이터베이스
  • 디스크 검색보다 자료 접근이 훨씬 빠름
  • 디스크 방식은 디스크에 저장된 데이터를 대상으로 쿼리를 수행하지만,
  • 인메모리 방식은 메모리상에 인덱스를 넣어 필요한 모든 정보를 인덱스를 통해 빠르게 검색
  • 단점은 매체가 휘발성이라 DB서버 전원이 갑자기 꺼지면 안의 데이터가 삭제되기 때문에 날아가도 상관 없는 임시 데이터에 주로 사용 (로그인 세션)
  • 지속성을 보장하기 위해 입력/수정/삭제된 값은 모두 디스크에 로그로 기록하며, 디스크로부터 로그 파일을 읽어와 메모리에서 재구축 하기도 함
  • Redis, H2 …

Redis

  • NoSQL에 속하는 데이터 방식이며, key-value 구조
  • key-value 구조이기 때문에 별도 쿼리 없이 데이터 간단히 조회
  • Data Expire 설정 가능
  • String, List, Hash, Set, Sorted Set과 같은 다양한 자료구조 지원
  • 캐시로 사용할 수도 있고, Persistence Data Storage로도 사용 가능

 

캐시 방식

캐시는 나중에 요청할 결과를 미리 저장해 두었다가 빨리 제공하기 위해 사용

https://velog.io/@hyeondev/Redis-%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C


 

Look Aside Cache 패턴

  1. 웹 서버는 클라이언트 요청을 받아서, 데이터가 존재하는지 캐시를 먼저 확인
  2. 캐시에 데이터가 있으면 그걸 꺼내주고
  3. 없으면 DB에서 읽어 캐시에 저장한 후 클라이언트에게 데이터 돌려줌

Write Back 패턴

  • 데이터를 캐시에 전부 저장해 두고, 특성 시점마다 한번 씩 캐시 내 데이터를 DB에 insert 하는 방법
  • 속도가 빠르지만 캐시에 업데이트 하고 메모리에는 바로 업데이트 하지 않기 때문에, 캐시와 메모리의 값이 다른 경우가 발생

Persistence 방식

  • 영속성을 보장하기 위해 데이터를 디스크에 저장할 수 있음

AOF(Append Only File) = 보관

  • 입력/수정/삭제 명령이 실행될 때 마다 파일(appendonly.aof)에 기록(조회는 제외)
  • 서버가 재시작 될 때 파일에 기록된 연산을 재실행하여 데이터 복구
  • AOF를 계속 수행하면 기록되는 파일의 사이즈가 너무 커지지만, 특정 시점에 데이터를 다시 쓰는 rewrite를 수행해서 사이즈를 줄임
  • 서버 장애가 발생해도 데이터 유실이 거의 없음

RDB(Redis Database) = 백업

  • 특정 간격으로 메모리에 있는 데이터 전체를 디스크에 바이너리 형태로 기록
  • AOF보다 사이즈가 작고, 로딩 속도 빠름
  • 원하는 특정 지점의 데이터를 복구할 수 있어 재해 복구에 유용
  • 서버 장애가 발생할 경우 저장하기 전 데이터가 유실될 수 있음


Redis 테스트

# Redis 서버 접속

$ redis-cli

 

# 전체 key 조회

$ keys *

 

# key로 value 조회

$ get ${KEY}

 

# key 추가

$ set ${KEY} ${VALUE}

 

# key 검색

$ keys *${KEY}*

 

# key 삭제

$ del ${KEY}





'Database' 카테고리의 다른 글

PostgreSQL 함수(Function)  (0) 2023.05.10
PostgreSQL GIN Index  (0) 2023.01.30
PostgreSQL 테이블 소유자 변경  (0) 2023.01.11
PostgreSQL Insert 할 때 Seq 조정  (0) 2023.01.04
PostgreSQL 테이블 청소  (0) 2022.12.21