[Database] Redis

Redis

Remote Dictionary Server 의 약자
Redis
Redis는 Salvatore Sanfilippo 가 만든 오픈소스 저장소이다.
2009년 5월 10일 처음 릴리즈 되었다. 안정성이 검증되어 수많은 회사들이 사용하고 있다.

### Table of Contents

## Redis Basic ### Redis 특징

NoSQL

다양한 종류의 NoSQL 데이터베이스가 존재한다.
Key-value 방식은 NoSQL의 가장 기본적인 구조인데 Redis 는 Key-Value 기반이다.

가변적인 구조로 데이터를 저장 할 수 있다.
no-sql

Image Source

In-memory Solution

Redis 는 In-memory 기술을 사용한다.
하드디스크에서 데이터를 처리하는게 아닌 메모리 안(In-memory)에서 데이터를 관리한다.

CPU(Processor)와 물리적으로 가깝게 위치해 있을수록 속도가 빠르다.
메모리(SDRAM)는 디스크보다 CPU에 근접해 있기에 처리 속도가 몇 백배 빠르다.

Memory Diagram

Image Source

Key-Value

키-값 기반으로 데이터를 저장한다.
값에 올 수 있는 자료형은 총 다섯가지 유형으로써 아래와 같다.

속성은 키와 값 두 가지만 존재한다.

Single-Thread

한번에 하나의 명령만 실행할 수 있다.

Redis 장단점

장점

단점

Redis 와 Cache

↑ return to TOC

Redis Data Structure

Redis Collections

Redis는 5가지의 데이터 구조를 제공한다.

Hash

Key 와 Value 로 이루어진 Object 와 같은 형태의 데이터를 저장하기 좋다.
Key 와 Key 의 Sub Key 가 존재한다.
hmset <set> <subkey1> <value1> <subkey2> <value2>
hmget <key> <subkey>
hget <key>
hgetall <key>

List

배열 형태의 데이터 구조

Set

파이썬의 Set 처럼 순서가 없고 중복된 값이 없는 구조
보통 Redis에서 Set은 데이터의 유무 확인을 위해 사용한다.
sadd <key> <value>
smembers <key>
sismember <key> <value>

Sorted Set

Redis 에서 자주 사용되는 자료구조
Set의 특징을 갖고 있지만 Score 를 통해 순서를 정할 수 있다.

zadd <key> <score> <value>
zrange <key> <startindex> <endindex>

Strings

Key-Value 매핑 구조

주의 사항

Collection

Redis Use Cases

↑ return to TOC

Redis Memory

메모리 한계

maxmemory configuration

Max Memory 최대 메모리 용량을 설정함으로써 그 이상을 사용하지 못하도록 함.
이 이상을 넘어갈 시에는 Option을 설정.

maxmemory policy

  1. noeviction
    기존 데이터를 보존.
    OOM 오류를 반환하고 새로운 데이터는 버림.
    • OOM : Out Of Memory
  2. allkeys-lru
    LRU 알고리즘을 통해 데이터를 삭제.
    • LRU : Least Recently Used
  3. volatile-lru
    기본 값

  4. allkeys-random
    렌덤하게 데이터를 삭제시켜 저장 공간 확보.

  5. volatile-random
    expire set 중 렌덤으로 데이터를 삭제.

  6. volatile-ttl
    expire set 중 TTL 값이 짧은 것 부터 삭제.
    • TTL : Time To Live
  7. allkeys-lfu
    가장 적게 엑세스된 키를 제거하여 저장 공간 확보.

  8. volatile-lfu
    expire set 중 가장 적게 엑세스 된 키 순으로 삭제.

eviction
Eviction 이란 Maxmemory 초과로 데이터가 지워지는 것을 뜻한다.

메모리 관리

하나의 큰 Instance 를 사용하는 것 보다는 여러개의 작은 Instances 를 사용하는 것이 안정성이 높다.

ziplist
메모리를 적게 쓰기 위해서 ziplist를 사용할 수 있다.
List, Hash, Sorted Set 과 같은 구조를 ziplist 로 바꿀 수 있다.

↑ return to TOC

## Run Redis ### Run Redis Container 도커에 적재되어 있는 Redis 컨테이너를 백그라운드 모드로 실행시키기.
docker run -d redis
위의 명령어 입력후 받은 Container ID를 아래와 같이 입력.
docker exec -it <containerID> redis-cli