[Redis] Redis 란

참고

개요

  • 일반적으로 데이터베이스는 저장장치에 저장이 되는데, 데이터베이스를 조회하려면 저장장치로 i/o가 발생
  • 캐시는 in-memory 방식을 활용하여 데이터를 임시로 저장해두기 때문에 훨씬 빠르게 동작할 수 있다.
  • 더 자주 접근하고 덜 자주 바뀌는 데이터를 저장 하여 조회하고 없을 때 데이터베이스를 다시 조회하는 방식을 활용하면 서비스의 속도를 향상시킬 수 있다

Redis 란

  • Remote dictionary server
  • "key-value" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템
  • in-memory 상태에서 데이터를 처리함으로써 관계형 데이터베이스(RDS), 문서형(Document) 데이터베이스보다도 빠르고 가볍게 동작
  • 다만 메모리에 데이터를 저장하기 때문에 서버가 꺼지면 모든 데이터가 사라진다는 단점이 있다.
  • 이런 특징으로 인해서 Redis는 전체 서비스에서 속도 향상을 위한 보조 데이터베이스로 사용되는 것이 보편적
  • 데이터에 만료시간을 지정하여 만료시간이 지나면 삭제되도록 할 수 있으며, 만료되지 않았지만 메모리가 꽉 찼을때도 LRU(Least recently used) 알고리즘에 의해 데이터가 사라진다.

Race Condition 해결 * Race Condition * 여러 개의 Thread가 경합하는 것 * Context Switching 에 따라 원하지 않는 결과가 발생 * Redis는 기본적으로 Single Threaded * Redis 자료구조는 Atomic Critical Section에 대한 동기화를 제공 * 서로 다른 Transaction Read/Write를 동기화

Redis 데이터 구조

  • Redis는 RDS와 달리 데이터 타입(VARCHAR, INT, DATETIME) 등을 지원하지 않음
  • 오직 몇 가지 로우 레벨의 데이터 타입을 지원

  • 문자열(String)

  • 해시(Hash)
  • 리스트(List)
  • 셋(Set)

Redis 데이터 처리

  • Redis는 "key-value" 데이터 구조로 매우 간단하게 데이터를 처리할 수 있다.
  • 데이터 입력/수정/삭제/조회에 대하여 아래와 같은 명령이 제공
종류 역할
set 데이터 저장
get 저장된 데이터 조회
rename 저장된 데이터 변경
randomkey 저장된 key 중에 하나의 key를 랜덤하게 검색
keys 저장된 모든 key를 검색
exists 검색 대상 key 존재 여부 확인
mset 여러 개의 데이터 저장
mget 여러 개의 데이터 검색

Redis 사용이 필요한 경우

  • 운영 중인 웹 서버에서 키-값 형태의 데이터를 처리해야 하고, I/O가 빈번히 발생해 다른 저장방식을 사용하면 효율이 떨어지는 경우 사용

Redis 사용예시

  • 사용자의 세션 관리
  • 게시물의 조회수
  • 유튜브를 생각해보면 인기 채널의 신규 동영상은 1시간도 안되어 100만 조회수를 넘기는 경우도 있다.
  • 조회수에 해당하는 데이터를 Redis에 저장해 캐싱 처리
  • 일정한 주기에 따라 RDS에 업데이트를 해 RDS에 가해지는 부담을 크게 줄이고 성능을 향상시킨다.

주의

  • Single Thread 서버 이므로 시간 복잡도를 고려해야
  • in-memory 특성상 메모리 파편화, 가상 메모리 등의 이해가 필요

links

social