Redis

Haechan Kim·2023년 7월 23일
0

Modern Java

목록 보기
4/5
post-thumbnail

Redis

Redis : Remote(외부) dictionary(HashMap 자료구조 key-value) server

Cache : 나중의 요청에 대한 결과 미리 저장했다가 빠르게 사용하는 것.

메모리 계층


위로 갈수록 빠르고 비쌈
아래로 갈수록 느리고 저렴

Main memory (DRAM) -> 휘발성
SSD -> 보다 크고 비휘발성

기본적으로 데이터는 컴 꺼져도 저장해야 하기 때문에 SSD에 저장
-> 기술 발달하고 메인 메모리에 저장해 빠르고 쉽게 데이터 접근하기 위해서 Redis 사용.

Database 보다 더 빠른 Memory에 더 자주 접근하고 덜 자주 바뀌는 데이터를 저장하자.

In Memory DB (Cache)

Java의 HashMap에 저장하지 않는 이유?

private final Map<String, Obeject> hello = new HashMap<>();
  • 서버 여러대인 경우 서버마다 다른 데이터 갖고있기 때문에 consistency 문제 발생
    세션을 자바 객체로 저장할 경우 다른 서버에서는 해당 세션 없기 때문에 문제 발생!

  • Multi-threaded 환경에서 Race Conditon 문제 발생

Race Conditon
여러 스레드가 결합하면서 context switching이 주기적으로 발생 -> 원하지 않는 결과 발생

Redis는 기본적으로 single threaded.
Redis 자료구조는 atomic한 성질 갖고있음. -> critical section에 대해 동기화 제공.
여러 transaction들이 read/write 동기화.

Redis 어디서 사용?

  • 여러 서버에서 같은 데이터 공유할 때
  • 싱글 서버라면? -> atomic한 자료구조, cache 사용 위해.

주의할 점

  • single thread 서버 -> 시간 복잡도 고려해야 함.
  • in memory 특성상 메모리 파편화, 가상 메모리에 대한 이해 필요

single threaded

한 커맨드 시간 오래 걸리는 경우 나머지 요청 받아지지 않고 서버 다운될 수 있음.
처리 빨라야 함 -> O(N) (전체 데이터 다루는 getAll, flush 등) 명령어 주의해서 사용하자.

Memory 관리

memory 파편화

메모리 할당받고 해제하는 과정에서 부눈부분 비어있는 공간 생김.
실제 사용하는 것보다 더 많는 메모리 사용한다고 인식.
-> 메모리 여유있게 사용해야 함.

virtual memory - swap

프로세스 메모리에 올릴 때 전체 다 x. 일부만 올려 메모리에서 사용하고 덜 쓰이는 메모리는 디스크에 저장했다가 필요할때 올려 사용 -> 이때 발생하는 latency 길어지면 (싱글 스레드이기 때문에) 문제 발생 가능성.

Replication (복제) - fork

레디스는 휘발성 갖고있는 메모리 상의 데이터 저장소 -> 항상 유실 문제 갖고 있다. -> 데이터 복제 기능 제공
메모리 가늑 차있을 시 fork 제대로 x.

Redis의 메모리는 제한되어 있기 때문에 주기적으로 scale out, back up 해야 함. -> redis cluster

RDBNoSQLIn Memory
보조 기억 장치에 저장보조 기억 장치주기억 장치 (RAM..)
row, columnKey-Value 형태Key-Value 형태 (NoSQL 방식)
구조, 데이터 형식 변경 잦은 경우둘에 비해 용량 크기 제한적
in-out 빠름

주기억 장치 (computer memory, primary memory) : 현재 cpu가 처리하고 있는 내용 저장하고 있는 기억장치.
용량 크고 처리 속도 빠름.
RAM, ROM

보조 기억 장치 : 물리적 디스크 연결된 기억 장치.
주기억장치보다 느리지만 컴 껴져도 데이터 영구 저장.
HDD, SDD

0개의 댓글