
Redis는 인메모리 데이터 구조 저장소로, 메모리 위에서 번개처럼 빠르게 작동하는 다양한 자료형과 기능을 갖춘 비관계형 데이터베이스라고 볼 수 있죠.
인메모리 특성 덕분에 속도는 물론, 여러 가지 자료형과 기능으로 데이터를 자유자재로 표현하는 마법을 부릴 수 있답니다.
레디스는 BSD 라이선스라는 자유로운 옷을 입고 세상에 나온 오픈소스입니다.
ANSI C로 정성껏 빚어졌고, 아주 적은 메모리로도 데이터를 튼튼하게 지켜내는 묘한 힘을 가졌죠.
레디스의 대표적인 장점은 이렇습니다.
레디스는 NoSQL 계열에 속하는데, RDBMS가 가끔은 버거워하는 부분을 살짝 보완해주는 역할을 합니다. RDBMS는 범용성도 좋고 성능도 훌륭하지만, 언제나 만능은 아니니까요.
예를 들어, 속도가 모자라거나, 특정 데이터 모델을 표현하려면 복잡한 구현의 늪에 빠지기 쉽습니다.
물론 이런 문제를 해결하려고 인덱스 설정, 쿼리 설계, 비정규화 같은 다양한 묘책이 있지만, 때로는 NoSQL을 선택하는 게 훨씬 깔끔하고 효과적일 때가 많죠.
즉, 레디스는 RDBMS가 힘겨워하는 부분을 든든히 받쳐주는 조력자 역할을 한다고 볼 수 있습니다.
레디스의 가장 큰 매력은 속도가 빠르다는 점과, 다양한 자료형을 자유자재로 다룰 수 있다는 점입니다.
레디스는 인메모리 데이터베이스라 메모리(RAM)에 데이터를 담아두고, 디스크 IO의 발목 잡힘 없이 척척 처리할 수 있습니다.
게다가 레디스는 고속 메모리에서 데이터를 다루면서 메모리 사용량도 스마트하게 줄이는 여러 가지 기술을 품고 있습니다.
물론 RDBMS도 메모리에서 처리하는 경우가 많지만, 레디스는 인메모리 처리에 특히 최적화되어 있어 더 빠르게 움직이는 셈이죠.
물론, 은총알은 없다는 격언처럼, 모든 게 장점일 수만은 없겠죠.
레디스를 선택함에 있어서 트레이드 오프는 다음과 같습니다:
이러한 트레이드-오프가 있기에, 사용하는 서비스의 특성에 맞게 레디스의 도입을 고려하는 것이 당연합니다. 그렇기에 보통은 RDBMS와 함께 사용하여 시너지를 내도록 사용됩니다.
예를 들면, 웹 서비스에서는 MySQL과 같은 RDBMS와 Redis를 조합하여 Redis를 캐시로 사용할 수 있습니다.
레디스가 어떻게 데이터를 저장하는지 내부를 살펴보겠습니다.
redis.io에서는 데이터 타입을 위와 같이 정의하고 있습니다.
레디스의 여러 자료형의 복잡한 값들은 모두 키에 연결되어 있으며, 이와 같은 방식은 전통적인 관계형 데이터베이스와 차이가 있습니다.
레디스는 MySQL이나 Oracle과 같은 RDBMS와는 용도가 다릅니다. 우선 범용성이 높고 표현력이 뛰어난 SQL을 사용할 수 없으며 RDBMS에 비해 트랜잭션 기능이 일부 제한됩니다. 대신, 인메모리 처리로 빠른 속도를 제공하며 다양한 자료형 및 기능을 갖추고 있습니다.
레디스는 Memcached와 같은 키-값 저장소와 자주 비교됩니다. 키-값 저장소는 비교적 기능이 간단하며, 빠른 속도가 요구된다는 점에서 레디스와 특징이 유사합니다.
물론 레디스도 키-값 저장소와 동일한 기능을 포함하고 있으며, 다양한 자료형을 통해 복잡한 형식의 데이터도 저장 가능하다는 부가적인 특징이 있습니다.
많은 사람들이 라이브러리를 설치할 때 라이브러리를 사용하는 패키지 간의 의존성을 해결하기 위해 고민합니다. 레디스의 특징 중 하나는 운영체제에서 외부 라이브러리를 따로 설치할 필요가 없도록 구현되었다는 점입니다.
따라서 다양한 환경에서 간단하게 설치가 가능하고, 버그가 발생할 위험 또한 낮습니다.
레디스는 대규모 웹사이트를 위한 도구에 국한되지 않고, 트위터나 깃허브와 같은 대규모 서비스 뿐 아니라 중소 규모의 서비스에서도 광범위하게 활용됩니다.
용도 역시 웹 어플리케이션 캐시에 국한되지 않습니다. 배치 처리 메시지 큐, Pub/Sub 시스템 구축 등에도 사용할 수 있습니다.
데이터베이스 관련 정보를 정리한 DB_ENGINES에 따르면, 이 글을 쓰는 2025년 8월 17일 기준 Redis는 인기순위 7위에 등록되어 있습니다.

키-값 저장소로서는 오랜 기간 1위를 유지하고 있습니다.
레디스를 도입하면 애플리케이션을 간단하게 구현할 수 있고, 속도 측면에서 이점을 얻을 수 있어서 다음과 같은 상황에서 유용하게 활용할 수 있습니다.
💡실제 예시로는 다음과 같은 것들이 있습니다:
세션 저장소
웹 애플리케이션에서 사용자 로그인 상태를 빠르게 조회하기 위해 세션 정보를 Redis에 저장한다. 예를 들어, 쇼핑몰 서비스에서 장바구니 정보를 Redis 세션에 담아두면, DB를 직접 조회하지 않고도 빠른 응답을 제공할 수 있다.실시간 랭킹 서비스
게임이나 SNS에서 인기 게시글, 실시간 점수판, 좋아요 순위 같은 기능을 구현할 때 Redis의 Sorted Set을 활용한다. 예를 들어, 온라인 게임에서 플레이어 점수를 Redis에 업데이트하면 실시간으로 순위를 계산하고 보여줄 수 있다.
레디스는 인메모리 내에서 데이터를 처리하여 속도가 빠른 데이터 구조 저장소라는 점이 매력이며 다음과 같은 특징이 있습니다:
💡레디스의 원자성
원문에서는 레디스가 원자성을 가진다고 설명했지만, 루아 스크립트 활용시, 여러 명령 중간에 특정 명령이 실패해도 롤백 기능은 없다.
따라서 실패한 명령 이전의 명령들은 전부 실행 처리가 되며, 엄밀하게 말하면 원자성이라 보기 어렵다!
💡싱글 쓰레드 기반 요청 이벤트 주도 처리
레디스는 싱글 쓰레드 주도 처리 모델을 채택하고 있다. 싱글 쓰레드지만 이벤트 루프를 형성하여 많은 요청을 처리할 수 있으며ae라는 고유 이벤트 주도 라이브러리를 사용한다. 싱글 쓰레드로 인한 성능 문제를 우려할 수 있지만, 싱글 쓰레드가 다른 지표에 비해 CPU 전체가 병목 현상을 일으키는 경우는 비교적 드물다. 레디스를 여러 인스턴스로 실행하면 성능 문제를 어느 정도 해결할 수 있다.
또한 레디스가 완전한 싱글 쓰레드라는 것은 오해이며, 일부 삭제 작업에 멀티 쓰레드를 사용할 수 있고, Redis 6.0이후에는 I/O 멀티 쓰레딩도 도입되었다.