Redis 개요
개요
레디스는 Remote Dictionary Server의 약자로서, “키-값” 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템이다. 2009년 살바토르 산필리포가 처음 개발했다. 2015년부터 Redis Labs가 지원하고 있다. 다양한 서비스에서 레디스를 자유롭게 사용되고 있다.
Pareto principle(파레토의 법칙)
우리 사회에서 일어나는 현상의 80%는 20%의 원인으로 인해 발생됨을 뜻하는 법칙이다. 웹 사이트에 대한 접근도 파레토의 법칙이 딱 들어맞아,
인터넷 통신의 80%가 불과 20%의 사이트에 대한 액세스로 추정되며, 이 20%의 웹사이트 데이터를 캐시해두면 효율을 극적으로 향상할 수 있다
고 한다.
(인프라 엔지니어의 교과서 - 네트워크편, 2017, 길벗)
따라서 공통으로 사용되는 데이터는 레디스를 이용하여 캐시로 저장해 두는 것이 리소스를 효율적으로 이용할 수 있는 방법이 될 수 있을 것이다.
왜 Collection이 중요한가요?
레디스는 In-Memory 데이터베이스이다. 즉, 모든 데이터를 메모리에 저장하고 조회한다. 기존 관계형 데이터베이스(Oracle, MySQL) 보다 훨씬 빠른데 그 이유는 메모리 접근이 디스크 접근보다 빠르기 때문이다. 하지만 빠르다는 것은 레디스의 여러 특징 중 일부분이다. 다른 In-Memory 데이터베이스(ex. Memcached) 와의 가장 큰 차이점은 다양한 자료구조
를 지원한다는 것이다. 레디스는 아래처럼 다양한 자료구조를 Key-Value 형태로 저장한다.
레디스는 기본적으로 String, Bitmap, Hash, List, Set, Sorted Set 를 제공했고, 버전이 올라가면서 현재는 Geospatial Index, Hyperloglog, Stream 등의 자료형도 지원하고 있다.
그렇다면 이렇게 다양한 자료구조를 제공하는게 왜 중요할까요? 바로 개발의 편의성과 난이도 때문이다.
예를 들어, 실시간 랭킹 서버를 구현할 때 관계형 DBMS를 이용한다면 DB에 데이터를 저장하고, 저장된 SCORE 값으로 정렬하여 다시 읽어오는 과정이 필요할 것이다. 개수가 많아지면 속도가 느려지게 마련인데, 이 과정에서 디스크를 사용하기 때문이다. In-memory 기반으로 서버에서 데이터를 처리하도록 직접 코드를 짤 수도 있겠지만, 레디스의 Sorted-Set을 이용하는게 더 빠르고 간단한 방법일 것이다.
Redis 특징
- Redis는 key-value store NoSQL DB이다.
- 싱글 스레드로 동작하며, 자료 구조를 지원한다.
- 다양한 용도로 사용될 수 있도록 다양한 기능을 지원한다.
- 데이터의 스냅샵 혹은 AOF 로그를 통해 복구가 가능해서 어느정도는 영속성도 보장된다.
- Java Spring에서는 세션 관리 및 캐싱을 하는데 자주 사용된다.