Redis란 위키백과에 따르면 다음과 같다고 한다. Remote Dictionary Server의 약자로서 Key-Value 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)라고 한다. 모든 데이터를 메모리로 불러와서 처리하는 메모리 기반 DMBS라고 한다. 레디스는 스트링 뿐 아니라 자료구조의 추상적 자료형(Abstract Data Type)도 지원한다는 점이 다른 것들과 차이를 나타낸다고 볼 수 있다.
이렇게 다양한 자료구조를 지원하는 것에 대한 장점으로 개발의 편의성이 좋아지고 난이도가 낮아진다는 점을 꼽을 수 있다. Redis를 이용하면 레디스에서 제공하는 Sorted-Set이라는 자료구조를 이용해 더 빠르고 간단하게 데이터를 정렬할 수 있기 때문이다.
NoSQL로 Key-Value 타입의 저장소인 Redis의 주요 특징은 다음과 같다고 한다.
즉, Redis는 고성능 Key-Value 저장소로써 다양한 자료구조를 지원하는 NoSQL이라고 볼 수 있다.
Redis는 지속성을 보장하기 위해 데이터를 Disk에 저장할 수 있다고 한다. 서버가 내려가더라도 Disk에 저장된 데이터를 읽어서 메모리에 로딩을 한다고 한다.
데이터를 Disk에 저장하는 방식으로는 크게 2가지가 있다고 하는데 다음과 같다고 한다.
RDB(Snapshotting) 방식
: 순간적으로 메모리에 있는 내용을 Disk에 전체를 옮겨 담는 방식
AOF(Append On File) 방식
: 레디스의 모든 write/update 연산 자체를 모두 log 파일에 기록하는 방식
Redis를 사용하기 좋은 곳은 어디일까? 보통은 웹 서버에서 Key-Value 형태의 데이터 타입을 처리해야 하고 I/O가 빈번히 발생해 다른 저장 방식을 사용하면 효율이 떨어지는 경우에서 사용하게 된다. 어떤 것이 있을까?
유튜브를 생각해보자. 유튜브는 조회수와 같은 카운트 형태의 데이터가 필요로 할 것이다. 짧은 시간안에 조회수가 올라가듯 카운터도 올라갈 것인데 이럴 경우 이 데이터를 RDS 형태의 데이터에 저장해 I/O를 반복한다면 엄청난 자원이 사용될 것이라는 것을 상상할 수 있을 것이다. 이런 경우에 Redis를 이용해 데이터를 캐싱 처리하고 일정한 주기에 따라 RDS에 업데이트를 한다면 RDS에 가해지는 부담을 크게 줄이고, 성능은 향상시킬 수 있을 것이라고 한다.
또 Redis가 가장 많이 사용되는 부분은 사용자의 세션 관리 라고 한다. 사용자의 세션을 유지하고 불러오고 여러 활동들을 추적 하는 등의 효과적으로 사용이 가능하다고 한다. 매우 빠르게 동작한다는 점에서 메시지 큐잉에도 사용할 수 있다고 한다. 또한 API 캐싱 역시 라우트로 들어온 요청에 대해 요청 값을 캐싱하면 동일 요청에 대해 캐싱된 데이터를 리턴하는 방식으로 요긴하게 사용 할 수 있다고 한다.
레디스의 더욱 자세한 내용은 아래의 첨부 링크를 통해 더 공부해 볼 수 있을 것이다.
참고자료
https://devlog-wjdrbs96.tistory.com/374
https://wildeveloperetrain.tistory.com/21
https://brunch.co.kr/@skykamja24/575
https://redis.io/docs/