Redis 기초
이 글은 레디스에 대한 간략한 정리로 사용법을 작성해두지 않았습니다.
스프링은 200개 스레드로 멀티스레드로 돌아감
이런 멀티스레드 환경에서 많은 트래픽이 몰리면(예를들어 티케팅같은 서비스에서..) 동시성 문제가 발생함.
단적인 비유로 이런 문제를 해결하는 것이 레디스로 구현이 가능함.
레디스가 지원하는 자료구조
자료구조에 의한 특징들 : 기본적으로 key - value 형식임
- TTL(Time To Live) : 생존시간을 key에만 설정할수 있음. (expired 되는 시간을..)
- String : 문자열
- List(연결리스트)
- 키값에만 설정가능함.
- 연결리스트 특징을 그대로 가져감.(중간에 있는걸 빼면 느림. 끝에만 삭제가능)
- 사용 예시
- 티케팅 대기열 활용
- 최근 방문글 5개 리스트로 구현 ltrim 5 하면 뒤에것 짤라서 줌.
- Set(집합)
- 순서 보장 X, 중복 허용 X
- Hash(해시)
- key:value 안에 다시 Key:Value를 저장할 수 있는 자료구조.
- 단, Hash Key에만 TTL을 설정할 수 있다. (내부 키쌍에 설정할 순 없음.)
- 굉장히 빠르고
- Sorted Set
- 정렬된 Set 의미 (member, score) 쌍으로 이루어지는데 score를 기준으로 내부 로직에 따라 정렬이 자동으로 된다.
- 대부분의 커맨드는 O(logn)의 시간 복잡도를 가진다.
- 활용 예시
- 리더보드
- 많이 본 주식, 게시글 구현 등
-> Redis를 사용할 때는 반드시 어떤 비즈니스 요구사항에서 어떤 데이터를 저장할지를 토대로 적절한 자료구조를 고민하는 과정이 필요하다.
Redis의 대표적 활용 사례
1. Cache 저장소로서의 활용.
In-memory로 빠르게 동작하면서도 다양한 자료구조를 지원한다는 장점이 있다!
위 장점과 더불어 기술적으로 충분한 성국을 이뤘다는 점에서 Remote Cache Server로 사용된다. (외부에 있는 서버)
2. Scale-out 상황에서 중앙 저장소로서의 활용
세션의 경우 각 내부 메모리에 저장이 되는데 인스턴스가 많은 경우 세션 동기화가 되지않음. 중앙 집중형으로 만들어 모든 app이 바라보도록 한다.
3. 데이터 저장 목적
코인 시세 저장 목적. 영속성 구현보다는 여러대의 서버 사이에 주고받을 데이터를 저장하는 것에 가깝다.
MSA가 많아지면서 이 용도가 늘어났다.
Redis가 죽어서 데이터가 휘발되더라도 상관없는 데이터를 주로 사용한다.
4. 데이터 전송 목적으로 활용
Redis 는 Kafka와 유사한 Pub/Sub 기능을 제공해준다.
이를 이용해 EDA(Event Driven Architecture)를 구현하는 등의 활용이 가능하다
5. 동시성 문제 해결을 위한 활용
선착순 티케팅의 경우 문제. 여러 인스턴스의 동시성을 관리하기 힘들 때 싱글 스레드로 작동하는 레디스가 이 문제를 해결하는데 도움이 된다. lock을 구현하는 등..
Redis Clustering (H/A)
Redis에서 제공해주는 고가용성을 구현하기 위한 기능. 만약 하나가 마비되도 사용할 수 있도록..
Redis 3.0 버전 부터 1000개의 노드까지 추가 가능.
Redis를 이용해 개발할 때의 흐름
클라이언트 종류
- Terminal Redis-cli
- Java application - Lettuce
- Java application - Redison
레디스를 사용할 때 꼭 생각해봐야 할 것
1 왜 레디스를 사용했는지?
2 왜 해당 자료구조를 사용했는지?