Redis는 개방형 소스( BSD 라이선스 ), 메모리 내 데이터 구조 저장소로 데이터베이스, 캐시 및 메세지 브로커로 사용된다.
Redis는 시스템 메모리를 사용하는 Key - Value 데이터 스토어로 인메모리 상태에서 데이터를 처리함으로써 흔히 사용하는 관계형 데이터베이스( RDS )로 빠르고 가벼운게 특징이다.( Redis가 관계형 데이터베이스는 아님 !! )
사용자가 늘어남에 따라 WEB - WAS - DB 의 3계층 구조를 사용하는 경우 DB에 부하가 가해져 느려지기 시작하는데, 이 부하를 줄이기 위해 한 번 읽어온 데이터를 저장하고, 다시 요청하는 경우 빠르게 결과 값을 받을 수 있도록 한다.( 캐싱 )
데이터를 메모리에 저장하기 때문에 디스크 기반 데이터베이스보다 더 빠르게 데이터를 읽을 수 있다.
많은 입출력을 발생시키는 데이터를 처리할 때, 레디스를 사용해 데이터를 캐싱 처리하고, 일정한 주기에 따라 RDS에 업데이트를 하면 RDS에 가해지는 부담을 크게 줄이고, 성능은 크게 향상할 수 있다.
Redis는 사용자의 세션을 관리할 수 있어서 사용자의 세션을 유지하고, 불러오고, 여러 활동을 추적하는 것에 효과적으로 사용할 수 있다.
또한, 매우 빠르게 동작하는 점을 이용해 메세지 큐에도 사용할 수 있다.
라우터로 들어온 요청에 대해 요청 값을 캐싱하게 되면, 요청에 대해 캐싱된 데이터를 리턴하게 되는데, 캐시를 쓰면 성능이 향상되고, 자주 접근하는 데이터를 캐싱하면 자주 갱신할 필요가 없다.
레디스는 관계형 데이터베이스가 아니다. 그러므로 RDS( 관계형 데이터베이스 )와 달리 데이터 타입( VARCHAR, INT, DATETIME )등을 지원하지 않는다.
오직 몇 가지의 데이터 타입을 지원한다.
문자열( String ) : 데이터를 무낮열로 저장
해시( Hash ) : 해시는 필드를 가질 수 있다.
리스트( List ) : 리스트 안 데이터는 문자열만 가능하다.
셋( Set ) : 리스트와 유사하지만 고유 값( Distinct Value )를 저장한다. 또한 셋은 정렬을 할 수 있는 특징을 가지고 있다.
Sorted Sets : 값을 기준으로 순서가 지정된 세트
Hashes : 필드 및 값의 목록을 저장하는 데이터 구조
Bitmaps : 비트 수준 작업을 제공하는 데이터 유형
HyperLogLogs : 데이터 집합 내 고유 항목을 추정하기 위한 확률적 데이터 구조
Streams : 로그 데이터 구조 메시지 대기열
Geospatial : 경도/위도 기반 항목 맵
JSON : 숫자, 문자열, 부울, 배열 및 기타 개체를 지원하는 명명된 값의 중첩된 반정형 객체
Redis는 데이터베이스가 아니지만, 레디스의 스키마는 데이터를 정규화하고, 데이터의 행에 대해 일관된 레퍼런스를 가질 수 있게하는 용도로 존재한다.
user:userId:email:문자열
FLUSHDB 명령어를 통해 모든 키를 파괴한다. 복구가 불가능하다.
각각의 키를 저장할 때 Set에 저장해 특정 시간이나 조건에 따라 삭제하는 방법이다.
가장 많이 사용되는 방법으로 SET 커맨드로 저장해 EXPIRE 커맨드로 기간 만료 시간을 정하는 방법을 사용한다.
레디스 2.0.0 이상을 사용할때에는 SETEX 커맨드를 사용한다.