Computer Science/DB

[DB] In-memory DB : Redis

findTheValue 2021. 8. 29. 01:56

디디님의 10분 테코톡 시청하며 작성했습니다.

 

Redis

  • Redis
  • Cache
  • Redis 자료구조
  • Redis 주의사항
  • Remote dictionary server(외부 해시맵 서버)

 

작년 쿠팡 redis 문제 -> key가 32bit CPI int범위를 넘어갔기 때문.


 

What is Redis?

  • Remote dictionary server
  • Database, Cache, Message broker
  • In-memory Data Structure Store
  • Supports rich data structure

 

DB는 HDD,SSD 메모리 계층에 존재해야함(꺼져도 손실되면 안됨)

하지만 Redis는 더 자주 접근하고 덜 자주 바뀌는 데이터를 더 빠른 Memory계층에 저장하기 위해

In-memory층 즉 SRAM인 Cache층을 사용하는 DB이다.

 

 

  • 파이썬의 List, Set, Dictionary, Sorted Set, Hash(object만들 저장하는 redis만의 자료구조)를 사용함.

 


자바의 자료구조를 안쓰고 redis를 쓰는이유

 

자바로 쓰면 안되는 이유

  • 서버가 여러대인 경우 Consistency 문제 발생
    • 서버마다 다른 Data로 인해 불일치 문제 발생.
    • ex) session같은거 다른 server에서 알수없다
  • 멀티 쓰레드에서 Race Conditon발생
    • 여러 쓰레드가 경합하는 것.
    • Context Switching에 따라 원하지 않는 결과가 발생

 

Redis 쓰는 이유

  • Race Condition 해결
    • Redis는 기본적으로 싱글 스레드기 때문에 Redis자료구조는 Atomic Critical Section(동시에 여러 프로세스가 접근하면 안되는 영역)에 대한 동기화를 제공합니다.
    • 즉 서로 다른 Transaction Read/Write를 동기화합니다.
  • 때문에 여러 서버에서 같은 data를 공유하거나 Atomic자료구조나 Cache를 쓰기위해서도 씀.

주의해야 할 점

  • 싱글 쓰레드이므로 시간복잡도를 고려해야함
  • In-memory 특성상 메모리 파편화, 가상 메모리등의 이해가 필요하다.
  • Redis가 싱글쓰레드를 쓰는 이유.
    • Event Driven(비동기)
    • IO-bound Process(메모리 IO에서 보내는 시간이 길기 떄문에.CPU최적화의 효율이 크지 않기때문에 사용)
    • Context-Switching의 효율이 적다
    • Single Threaded
    • 사용의 단순함
  • 네트워크의 요청을 받아서 명령을 수행
    • 빨리빨리 처리해야하고 그만큼 처리가 빨라야 한다. O(N)을 전부 뒤지는건 지양해야함

 

Memory관리

  • 메모리 파편화
    • 메모리의 파편들이 남아있으면 빈칸이 자리를 차지하게 됨
    • redis를 사용할때는 메모리를 넉넉히 잡아야함
  • Virtual Memory - Swap
    • Main Memory와 Backing Store의 자주쓰는 Process여부에 대한 Swap을 지원.
    • 하지만 latency가 발생하기 때문에 잘 고려해서 사용해야함.
  • Replication - Fork
    • 복사해서 저장하는 방식을 사용하는데 메모리가 차면 에러가 나기 때문에
    • 늘 메모리를 여유있게 잡아야한다.

 


Key words

  • Redis를 저장소 처럼
    • Redis Persistent
    • RDB
    • AOF
  • Redis의 메모리는 제한되어있기 때문에 주기적으로 Scale out, Back up을 해야함
    • Redis Cluster
  • 부하분산
    • Constant Hashing
  • Data Grid
    • Spring Genfire, Hazlecast

'Computer Science > DB' 카테고리의 다른 글

[CS] 트랜잭션(transaction)  (0) 2021.07.10