Redis : Remote(외부) dictionary(HashMap 자료구조 key-value) server
Cache : 나중의 요청에 대한 결과 미리 저장했다가 빠르게 사용하는 것.
위로 갈수록 빠르고 비쌈
아래로 갈수록 느리고 저렴
Main memory (DRAM) -> 휘발성
SSD -> 보다 크고 비휘발성
기본적으로 데이터는 컴 꺼져도 저장해야 하기 때문에 SSD에 저장
-> 기술 발달하고 메인 메모리에 저장해 빠르고 쉽게 데이터 접근하기 위해서 Redis 사용.
Database 보다 더 빠른 Memory에 더 자주 접근하고 덜 자주 바뀌는 데이터를 저장하자.
In Memory DB (Cache)
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 동기화.
한 커맨드 시간 오래 걸리는 경우 나머지 요청 받아지지 않고 서버 다운될 수 있음.
처리 빨라야 함 -> O(N) (전체 데이터 다루는 getAll, flush 등) 명령어 주의해서 사용하자.
메모리 할당받고 해제하는 과정에서 부눈부분 비어있는 공간 생김.
실제 사용하는 것보다 더 많는 메모리 사용한다고 인식.
-> 메모리 여유있게 사용해야 함.
프로세스 메모리에 올릴 때 전체 다 x. 일부만 올려 메모리에서 사용하고 덜 쓰이는 메모리는 디스크에 저장했다가 필요할때 올려 사용 -> 이때 발생하는 latency 길어지면 (싱글 스레드이기 때문에) 문제 발생 가능성.
레디스는 휘발성 갖고있는 메모리 상의 데이터 저장소 -> 항상 유실 문제 갖고 있다. -> 데이터 복제 기능 제공
메모리 가늑 차있을 시 fork 제대로 x.
Redis의 메모리는 제한되어 있기 때문에 주기적으로 scale out, back up 해야 함. -> redis cluster
RDB | NoSQL | In Memory |
---|---|---|
보조 기억 장치에 저장 | 보조 기억 장치 | 주기억 장치 (RAM..) |
row, column | Key-Value 형태 | Key-Value 형태 (NoSQL 방식) |
구조, 데이터 형식 변경 잦은 경우 | 둘에 비해 용량 크기 제한적 | |
in-out 빠름 |
주기억 장치 (computer memory, primary memory) : 현재 cpu가 처리하고 있는 내용 저장하고 있는 기억장치.
용량 크고 처리 속도 빠름.
RAM, ROM
보조 기억 장치 : 물리적 디스크 연결된 기억 장치.
주기억장치보다 느리지만 컴 껴져도 데이터 영구 저장.
HDD, SDD