redis는 Mecached와 비슷한 캐시 시스템으로서 동일한 기능을 제공하면서 영속성, 다양한 데이터 구조와 같은 부가적인 기능을 지원하고 있다.
redis는 모든 데이터를 메모리에 저장하고 조회한다. 즉 인메모리 데이터베이스이다.
앞서 말한 것만 생각한다면 redis에 모든 데이터를 메모리에 저장하는 빠른 DB일 뿐이라고 생각할 수도 있다. 하지만 빠른 성능은 redis의 특징 중 일부분이다.
다른 인메모리 디비들과의 가장 큰 차이점은 redis의 다양한 자료구조이다.
다양한 자료구조를 지원하게 되면 개발의 편의성이 좋아지고 난이도는 낮아진다는 장점이 있다.
예를 들어 어떤 데이터를 정렬할 때 DBMS를 이용한다면 DB에 데이터를 저장하고 저장된 데이터를 정렬하여 다시 읽어오는 과정은 디스크에 직접 접근을 해야 하기 때문에 시간이 더 걸린다는 단점이 있다.
하지만 이때 인메모리 데이터베이스인 redis를 이용하고 redis에 제공하는 sorted-set이라는 자료구조를 사용하면 더 빠르고 간단하게 데이터를 정렬할 수 있다.
REDIS의 특징
더욱 다양한 데이터 구조
문자열 뿐만 아니라 List, Set, 정렬된 Set, Hash, Bit 배열, hyperloglogs(매우 적은 메모리로 집합의 개수를 추정할 수 있는 방법)을 지원한다. 프로그램에서 위의 다양한 자료구조를 사용할 수 있다. 예를 들어 Sorted Set을 활용하여 게임 유저의 상위랭크 정보를 쉽게 제공할 수 있다.
Snapshots
redis는 특정 시점에 데이터를 디스크에 저장하여 파일 보관이 가능하다. 또한 장애 상황 시 복구에 사용할 수 있다.
복제
Master - Salves 구조로 여러 개의 복제본을 만들 수 있다. 따라서 데이터베이스 읽기를 확장할 수 있기 때문에 높은 가용성 클러스터를 제공한다.
트랜젝션
트랜젝션이란 데이터베이스 상태를 변경시키는 작업 단위를 의미하고 원자성, 일관성, 독립성, 지속성의 특징을 가지고 있다. redis는 이러한 특징을 지원한다.
Pub / Sub messaging
Publish(발행)과 Sub(구독)방식의 메시지를 패턴 검색이 가능하다. 따라서 높은 성능을 요구하는 채팅, 실시간 스트리밍, SNS 피드 그리고 서버상호통신에 사용할 수 있다.
루아 스크립트 지원
매우 경량화된 절차스크립트 언어인 루아를 지원한다. eval 명령어를 사용하여 루아스크립트를 실행시킬 수 있다. 따라서 프로그램을 명료하게 하고 성능을 높일 수 있다.
위치기반 데이터 타입 지원
redis는 실시간 위치기반데이터를 지원한다. 따라서 두 위치의 거리를 찾거나 사이에 있는 요소 찾기등의 작업을 수행할 수 있다. 이를 활용하여 맛집, 길찾기 그리고 지도기반의 고성능 서비스를 제공할 수 있다.