type은 데이터를 찾을 방식(ALL - 풀스캔, const - 인덱스), rows는 검색할 양을 나타냅니다.
같은 테이블내에서의 검색인데 두 쿼리의 실행계획이 다르다.
그 이유는 PK,FK,UNIQUE가 자동으로 인덱스를 생성하기 때문이다.
create index [인덱스 이름] on [테이블명(컬럼명)]
를 이용하면 인덱스를 직접 생성할 수 있다.
인덱스 이름은 자유롭게 지정할 수 있다.
Memcached와 비슷한 캐시 시스템으로서 동일한 기능을 제공하면서 영속성, 다양한 데이터 구조와 같은 부가적인 기능을 지원하고 있다.
모든 데이터를 메모리에 저장하고 조회한다. (인메모리 데이터베이스)
다른 인메모리 디비들과의 가장 큰 차이점은 레디스의 다양한 자료구조이다.
다양한 자료구조를 지원하게 되면 개발의 편의성이 좋아지고 난이도가 낮아진다는 장점이 있다.
어떤 데이터를 정렬 할 때, DBMS를 이용한다면 DB에 데이터를 저장하고, 저장된 데이터를 정렬하여 다시 읽어오는 과정은 디스크에 직접 접근을 해야하기 때문에 시간이 더 걸린다는 단점이 있다.
하지만 이 때 In-Memory 데이터베이스인 Redis를 이용하고 레디스에서 제공하는 Sorted-Set이라는 자료구조를 사용하면 더 빠르고 간단하게 데이터를 정렬할 수 있다.
Redis에서 자주 사용되는 Cache-Aside패턴과 Write-Back패턴에 대해 알아보겠다.
▶ 1. 더욱 다양한 데이터 구조
문자열 뿐만 아니라 List
, Set
, 정렬된 Set
, Hash
, Bit 배열
, hyperloglogs
(매우 적은 메모리로 집합의 개수를 추정할 수 있는 방법)을 지원합니다. 프로그램에서 위의 다양한 자료구조를 사용할 수 있습니다. 예를 들어, Sorted Set
을 활용하여 게임유저의 상위랭크 정보를 쉽게 제공할 수 있습니다.
▶ 2. Snapshots
레디스는 특정시점에 데이터를 디스크에 저장하여 파일 보관이 가능합니다. 또한, 장애 상황시 복구에 사용할 수 있습니다.
▶ 3. 복제
Master — Salves
구조로, 여러개의 복제본을 만들 수 있습니다. 따라서 데이터베이스 읽기를 확장할 수 있기 때문에 높은 가용성(오랜 시간동안 고장나지 않음) 클러스터를 제공합니다.
▶ 4. 트랜젝션
트렌젝션이란 데이터베이스 상태를 변경시키는 작업 단위를 의미하고, 원자성, 일관성, 독립성, 지속성의 특징을 가지고 있습니다. Redis는 이러한 특징을 지원합니다.
▶ 5. Pub / Sub messaging
Publish(발행)과 Sub(구독)방식의 메시지를 패턴 검색이 가능합니다. 따라서 높은 성능을 요구하는 채팅, 실시간 스트리밍, SNS 피드 그리고 서버상호통신에 사용할 수 있습니다.
▶ 6. 루아 스크립트 지원
매우 경량화된 절차스크립트 언어인 루아를 지원합니다. eval 명령어를 사용하여 루아스크립트를 실행시킬 수 있습니다. 따라서, 프로그램을 명료하게하고 성능을 높일 수 있습니다.
▶ 7. 위치기반 데이터 타입 지원
Redis는 실시간 위치기반데이터를 지원합니다. 따라서, 두 위치의 거리를 찾거나, 사이에 있는 요소 찾기등의 작업을 수행할 수 있습니다. 이를 활용하여 맛집, 길찾기 그리고 지도기반의 고성능 서비스를 제공할 수 있습니다.
위의 명령어로 maxmemory 기본 설정을 확인할 수 있다.
출처 : 코드캠프