참고자료
디스크 I/O?
디스크(예: HDD, SSD)와 컴퓨터의 메모리 간 데이터를 읽고 쓰는 작업을 의미한다.
I - Input 입력
: 데이터를 메모리에서 디스크로 저장
(ex. 데이터베이스에 새로운 레코드를 추가하거나 파일을 저장할 때)O - Output 출력
: 디스크에 저장된 데이터를 메모리로 가져옴
(ex. 파일을 열거나 데이터베이스에서 쿼리 결과를 가져올 때)
디스크 I/O
는 데이터베이스나 파일 시스템에서 데이터를 저장하거나 읽어오는 과정에서 발생하며, 일반적으로 디스크의 물리적 특성과 대역폭에 의해 속도가 제한된다.
장점
- 멀티 스레드 환경이 아니라서 Context Switch(작업 전환)가 발생하지 않아 효율적인 시스템 리소스 사용이 가능하다
- 마찬가지로 DeadLock(스레드들이 아무것도 진행하지 않는 상태로 서로 영원히 대기하는 상태)도 발생하지 않는다
단점
- 싱글 스레디이므로 전체 데이터 스캔과 같은 오버헤드가 큰 명령어를 처리하는 동안 다른 명령어 처리 불가
- 다른 명령어들은 이벤트 큐에 저장되어 있는 시간이 길어져 응답 속도가 저하된다.
참고사항)
IO 멀티플렉싱?
단일 스레드가 동시에 여러 네트워크 연결(소켓)을 관리할 수 있도록 도와주는 기술로, Redis는 이 기술을 사용하여 효율적으로 클라이언트 요청을 처리한다.
클라이언트
가 데이터를 요청한다.서버
는 먼저 Redis Cache에서 해당 키를 찾는다.클라이언트
는 캐시된 데이터를 받게 된다.서버
는 데이터베이스나 REST API를 통해 가장 최신 정보를 가져온다. Redis에 저장되는 모든 데이터는 유효 기간을 설정할 수 있다.
유효기간이 지난 데이터는 Redis가 해당 데이터를 메모리에서 삭제하므로, 효율적인 메모리 사용이 가능하다.
EXPIRE
: 이미 생성된 데이터에 EXPIRE
명령어를 사용하여 유효 기간을 설정EX
: 데이터를 생성할 때 EX
옵션을 사용하여 생성과 동시에 유효 기간을 설정💭 사내 프로젝트로 진행한 프로덕트를 위해 DB를 추가로 생성하긴 좀 그렇고, 그럼 인메모리 DB를 사용해볼까? 하던 찰나에 Redis 를 제안해주셔서 정리해본 개념노트.
덕분에 어떤 식으로 로직을 처리해야할지 조금씩 눈에 보이기 시작하는 거 같은데, 또 직접 삽질 여러번 해봐야 체화 되겠지..!!! 🪚