Remote(원격)에 위치하고 프로세스로 존재하는 In-Memry 기반의 Dictionary(key-value) 구조의 데이터 server 시스템이다.
저장 cache 용도로 많이 사용되고 있다.
I/O가 빈번하게 발생하는 조회수와 같은 카운트 형태의 데이터를 다룰 때도 사용.
사용자의 세션 관리, 메시지 큐잉, API 캐싱
NoSQL로 분류 되며 관계형 데이터베이스와 같이 쿼리 연산을 지원하지 않지만, 고속 읽기와 쓰기에 최적화 되어 있다.
저장 cache 용도로 많이 사용되고 있다.
SSD,HDD같은 저장공간에서 데이터를 가져오는 것이아닌 메인 메모리 RAM에 데이터를 올려서 사용하는 방법을 말한다.
기본적으로 속도가 매우 빠르지만. 단점으로 용량이 적다 즉 HDD나 SDD에 비싸기 때문에 메인 데이터로 사용하기에는 부담이 크다.
보통 그래서 캐시 데이터베이스 서버로 사용한다.
나중의 요청에 대한 결과를 미리 저장했다가 빠르게 사용하는 것 우리가 기존에 아는 HDD,SDD에 영구적으로 저장하는 것이 아닌(기존의 Database의 저장 방식)보다 더 빠른 Memory에 저장 하여 더 빠르게 접근하도록 한다.
RDBMS도 쿼리를 통해 조회해오면, 메모리에 존재하는 Buffered Cache를 이용한다.하지만 Buffered Cache를 활용할 때의 RDBMS와 레디스는 조회 시간 차이가 난다 RDBMS는 데이터 직렬화 역질렬화 과정이 잇기 때문에 그런것 같다.

Java의 Collection 처럼 다양한 자료구조를 제공해준다. List,Set,Sorted Set,Hash등
서버가 여러대인 경우 Race COndition 발생 할 수있다.
보통레디스를 말할 때 key-value 방식이라 말한다. 주의할 것이 java의 HashMap 과는 좀다르다
그냥 HashMap이 아닌 java-Redis 연동 클라이언트를 쓴다.
이런식으로 Map을 통해 꺼내오면 서버가 다중일 때 분산 환경에서의 데이터 불일치가 생길수 있다.

Lettuce, Jedis라는 두 가지 오픈소스중 보통 Lettuce 를씁니다. (Java - Redis 연동 클라이언트)

그밖에도 보안,어플리케이션이 종료되면 휘발성으로 사라지는 HashMap과달리 디스크 백업 옵션도 가능하다.
Rdis의 해결법
Redis는 기본적으로 Sing Threaded이며, Atomic Critical Section에 대한 동기화를 제공한다.(동시에 프로세스가 접근하면 안되는 영역)
서로다른 Transaction Read/Write를 동기화
레디스는 싱글 쓰레드 기반으로 돌아간다.
한 번에 하나의 명령어만 실행하기 때문에, 긴 처리시간이 필요한 명령어를 쓰면 불리하고 요청 건을 처리하기 전까지 다른 서비스 요청을 받아들일수 없고 서버가 다운 되는 현상이 일어 날 수 있다. 시간 복잡도에 주의 해야한다.
메모리 파편화란 메모리 공간이 작은 조각으로 나뉘어 사용되어 사용 가능한 큰 메모리 블록이 부족해지는 상황을 말합니다.
redis를 사용할때 메모리를 적당히 여유있게 사용하는 것이 좋다.