입사 후 .. 거의 모든 프로젝트에서 redis를 사용하고 있었는데,
이 녀석을 주 DB로 사용했던게 아니였어서
제대로 개념을 파악하고 사용하지 않았었다.
이 참에 개념 정리하면서 redis의 개념부터 장단점까지 다 잡고 가야겠다..
Redis: Remote Dictionary Server
풀네임에서 알 수 있듯이 기본적으로 Dictionary 구조 즉, 사전과 같은 구조로 되어 있다.한 마디로 Key, Value 구조의 비정형 데이터를
저장하고 관리하기 위한 오픈 소스 기반의 비관계형 DBMS?다.DB, Cache, 메시지브로커 및 스트리밍 엔진 등을 지원한다.
특징으로는 단순히 Key, Value 구조이기 때문에 쿼리를 사용할 필요가 없다.
그리고 데이터를 저장하는 구조가
다른 DB처럼 디스크에 쓰는 구조가 아닌
인메모리 구조이기 때문에 데이터를 읽고 쓸 때의 속도가 월등히 빠르다.
인메모리란 데이터를 디스크가 아니라 컴퓨터의 주기억장치인 RAM에 저장해두는 기법이다.
RAM에 저장하면, 데이터를 읽고 쓰는 동작을 메모리 내부에서 하기 때문에
디스크에서 읽고 쓰는 동작에 비해 속도가 최대 수백배 이상 빠르다고 한다.그렇다고 해서 장점만 있는 것은 아니다.
인메모리 기법에는 치명적인 단점이 존재하는데,
바로 용량으로 인한 데이터의 유실이 발생할 수 있다는 점이다.2019년에 쿠팡에서 오류가 발생한 적이 있었는데,
그 이유가 Redis의 용량 초과로 인한 서버 에러, RAM의 특성인 데이터 휘발 등 때문이다.
오키 데이터 저장하고 읽을 때 빠른거 알겠다.
캐시랑 메시지 브로커도 사용할 수 있는거 알겠다.
근데 왜 Redis?
Redis가 사랑 받는 이유는 여러가지가 있겠지만,
그 중에 하나 꼽자면 바로 Redis가 지원하는 자료구조에 있다.
아래는 Redis가 지원하는 자료구조다.
Strings, Bitmaps, Bit field, Hashes, Lists, Sets, Sorted Sets, Geospatial Indexes, Hyperloglogs, Streams
한 눈에 봐도 진짜 좀 다양한 자료구조를 지원한다.
살면서 저걸 다 쓸 일이 있을까 싶지만, 어쨌든 이건 Redis의 자랑이다.
추가적으로 다른 DBMS에서도 기본적으로 보장해주는 트랜잭션,
그리고 Race Condition에 빠질 확률 자체가 없는 Single Thread.
이렇게 장점 투성인 Redis이지만,
위에서 언급한 치명적인 용량 단점으로 인해서
보통은 사용자의 인증 토큰이나 인증 번호 등
데이터 자체가 크진 않지만, 좋은 사용자 경험을 위한 곳에 사용된다.