
Redis 개요
- Remote dictionary server
- Remote: 외부
- dictionary: HashMap (key-value)
- server : 서버
- 외부에 있는 dictionary 자료구조를 사용하는 서버
- Database, Cache, Message broker
- In-memory 데이터 저장 (메모리 상에 데이터를 저장)
- 요약: 메모리상에 HahsMap형태로 데이터를 저장하는 DB
Caching 이란?
- 캐싱: 나중의 요청에 대한 결과를 미리 저장했다가 빠르게 사용하는 데이터 접근 방식
- In-memory cache: 스토리지보다 더 빠른 메모리에 더 자주 접근하고 덜 자주 바뀌는 데이터를 저장하자!
- (참고) 메모리 계층구조 : 아래로 갈수록 느리고 저렴하고 용량이 크다
- CPU Register
- CPU Cache (SRAM)
- Main Memory (DRAM) - 휘발성 가짐 << redis에서 데이터를 저장하는 계층!
- Storage (SSD, HDD)
Redis 자료구조
- In Memory DB 중에서도 Redis의 특장점은 다양한 자료구조를 제공한다는 것!
Redis 자료구조의 종류
- Redis 자료구조 명 : 대응되는 자바에서의 자료구조
- String : Map.Entry
- List: LinkedList
- Set: HashSet
- SortedSet: TreeSet (숫자로 순서지정이 가능한 set)
- Hash : HashMap 혹은 Object
Why Redis?
인메모리 DB 면 결국 아래처럼 코드 상 변수 선언해서 사용하면 되는 거 아닌가?
private final Map<String, Object> inMemoryDB = new HashMap<>();
- 서버가 여러대인 경우 Consistency의 문제 발생!
- 세션을 저장한다고 했을 때, A 서버에서 S라는 세션을 저장했다면 B 서버 입장에서는 S라는 세션이 존재하지 않는 것처럼 보임!
- MutiThreaded 환경에서 Race Condition 문제 발생 가능
- Race Condition이란?
- 여러 개의 thread가 한 자원에 접근하며 경합하게 되는 현상
- Context Swtiching에 따라 원하지 않는 결과가 발생하게 됨
- Redis는 내부적으로 Race Condition을 방지한다!
- Redis는 기본적으로 single thread.
- Redis 자료구조는 Atomic Critical Section (프로세스 여러개가 동시에 접근하면 안되는 영역)에 대한 동기화 제공
- 서로 다른 Transaction의 Read/Write가 동기화 됨!
Redis 주의사항
Redis, 어디서 쓰나?
- 여러 서버에서 같은 데이터 공유할 때
- Single 서버에서도 캐싱을 위해 사용
주의해야 할 점 (Bold = 주의사항)
Reference