Redis는 언제 사용할까?

호밀빵 굽는 쿼카·2022년 8월 5일
0

NHN Cloud

목록 보기
3/16
post-thumbnail

Redis 가 주로 어떤 서비스에서 어떻게 활용되고 있는지에 대한 예시를 알고 싶어서 작성하는 글입니다.
교육:Redis란? 에 간단히 정리하긴 했지만, 활용사례에 대한 자세한 이해가 필요!

Redis 란?

Redis는 NoSQL의 종류 중 하나로, 키-값 데이터 구조를 가지는 데이터베이스 관리 시스템 입니다. NHN CLOUD에도 이 Redis 상품을 서비스하고 있는데요, NHN Cloud EasyCache는 Redis(REmote DIctionary Server)를 클라우드 환경에서 제공하는 서비스입니다.

Redis의 특징

  1. 영속성을 지원하는 인메모리 데이터 저장소 (메모리를 활용하면서 데이터 보존)
  2. 읽기 성능 증대를 위해 서버 측 복제를 지원
  3. 쓰기 성능 증대를 위해 클라이언트 측 샤딩을 지원

    샤딩 : scale out 기술 중 하나로, 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장하는 방법

또한 Redis의 가장 큰 특징으로는 빠르게 접근이 가능하다는 특징이 있어서 캐시로 사용되는 경우가 많다고 합니다. 캐시는 휘발되는 성격을 가지고 있으며, 이전에 사용되었던 데이터를 다시 사용하는 형식이라서 빠르게 접근 가능한 저장소에 저장됩니다.

이러한, Redis 의 특징을 알아보고 활용되는 사례를 보니, 훨씬 이해가 잘 되었습니다.

Redis 활용사례

데이터가 자주 변하지 않으면서, I/O 가 가장 빈번한 데이터는 Redis 를 사용하면 효과적입니다.

1) 조회수, 일일방문자 수

Redis의 자료구조 중 String은 문자열과 모든 이진데이터를 저장합니다. 사용자 수가 천만명이라고 가정할 때, String의 각 bit를 하나의 사용자로 생각하면 천만개의 bit로 표현할 수 있다. 이는 1.2MB 정도 크기이고 Redis String의 최대 길이는 512MB 이므로 실시간으로 천만 사용자를 나타내는 건 충분하다.

2) 좋아요 수

RDBMS에서 '좋아요' 수를 처리한다면 많은 입력이 발생하기에 INSERT,UPDATE에 의한 성능 저하가 생깁니다. Redis의 Set을 이용하면 이 기능을 간단하게 구현하고 빠른 시간 안에 처리할 수 있습니다. Set은 순서가 없고, 중복을 허용하지 않습니다. 해당 댓글에 '좋아요'를 누른 사용자의 ID를 아이템으로 추가하면 동일한 ID값을 저장할 수 없고 한명의 사용자는 하나의 댓글에 한번만 '좋아요'를 누를 수 있습니다.

3) 출석 이벤트

정해진 기간동안 매일 방문한 사용자를 구하는 서비스를 구현한다면, 일일방문자 수를 구하고 구해놓은 string 간의 비트를 비교하는 BITOP 를 사용해 이 서비스를 구현할 수 있습니다. (Redis 서버에서 바로 AND,OR,XOR,NOT 연산 가능)

4) 최근 검색 목록

RDBMS를 사용해 최근 검색 목록 서비스를 사용한다면, 사용자가 최근에 검색했던 테이블에서 최근 5개의 데이터를 조회해야합니다.

select * from KEYWORD where ID = 123 order by reg_date desc limit 5;

하지만 이런 방식을 사용한다면 (중복제거, 멤버별로 저장된 데이터 개수 확인, 오래된 검색어는 삭제하는 작업) 등이 이루어져야합니다.

Redis의 Sorted Set(중복을 허용하지 않고, 정렬되어 저장되는 특징)를 사용하면, 간단하게 구현할 수 있습니다. 자세한 방법 보기

Redis의 timeout 설정 필수 [ IN 개발자를 위한 레디스 튜토리얼 ]

❛ Redis는 In-memory DB 인만큼 메모리에 저장될 수 있는 데이터가 한정적입니다. 더이상 메모리에 데이터를 저장할 수 없는 경우 레디스에서는 가장 먼저 들어온 데이터를 삭제하거나, 가장 최근에 사용되지 않은 데이터를 삭제하거나, 혹은 더이상 데이터를 입력받지 못하게 됩니다.
가장 좋은 방법은 삭제되는 데이터를 레디스가 선택하도록 맡기지 않고, 직접 설정하는 것입니다. 데이터를 입력할 때 이 데이터의 사용 기한이 언제까지인지를 직접 설정해 줌으로서, 어플리케이션이 직접 해당 데이터가 삭제되는 타이밍을 제어할 수 있게 됩니다. 간단히 키에 대한 timeout을 설정하는 것입니다. 설정된 timeout 시간이 경과하면 키에 대해 DEL 명령어를 호출한 것처럼 키가 자동으로 삭제됩니다. 몇 초 뒤에 삭제되어야 하는지를 입력하거나, 혹은 유닉스의 timestamp를 이용하여 삭제되어야 하는 시각을 정확하게 설정할 수도 있습니다.
동일한 키가 다시 들어오면 이 timeout은 재설정됩니다. 따라서 자주 사용되는 데이터는 계속 남아있고, 사용되지 않는 데이터는 설정한 시간에 따라 삭제됩니다. 따라서 레디스를 사용하실 때, 모든 키에 expire 값을 추가하는 것을 권장합니다. ❜

참고링크

profile
열심히 굽고 있어요🍞

0개의 댓글