레디스 자료 구조 활용 사례

  • 레디스 자료구조에 내장된 함수를 이용해 원하는 기능을 구현하면 데이터를 애플리케이션의 메모리 영역으로 가져와 가공하는데 걸리는 시간을 아낄수 있음
  • 때문에 레디스가 제공하는 자료구조를 적절히 활용한다면 성능면에서 최적화 가능

sorted set을 이용한 실시간 리더보드

  • 리더보드의 두 가지 유형
    • 절대적 리더보드
    • 상대적 리더보드
      • 유저와 인접해있는 스코어를 보여주는 리더보드
      • 특정 그룹 내에서의 순위를 보여주는 리더보드
  • 일별 리더보드
    • daily-score:<날짜>의 키값을 이용
> ZADD daily-score:240807 90 player:120
> ZADD daily-score:240807 100 player:110
> ZADD daily-score:240807 80 player:130

// 전체 조회
> ZRANGE daily-score:240807 0 -1 withscores

// 상위 3개
> ZREVRANGE daily-score:240807 0 2 withscores

// 스코어 증가
// player:110 플레이어의 점수를 10점올림
> ZINCRBY daily-score:240807 10 player:110

> ZUNIONSCORE weekly-score:2408-02 daily-score:240807 daily-score:240808 daily-score:240809

sorted set을 이용한 최근 검색 기록

  • 요구사항
    • 유저별 최근 검색어 관리
    • 중복 검색어 제거
    • 최근 n개의 검색어 노출
  • 추가
    • ZADD search-keyword:<userId> <날짜> <키워드>
  • 조회 (최근 5개 조회)
    • ZREVRANGE search-keyword:<userId> 0 4 withscores
  • 동일한 데이터를 다시 입력하면 날짜(스코어)만 업데이트됨
  • 최근 5개의 데이터만 유지
    • ZREMRANGEBYRANK key start stop 커맨드 사용
    • ZREMRANGEBYRANK search-keyword:<userId> -6 -6

set을 이용한 태그 기능

// 셋에다가 3개 태그 입력
> SADD post:47:tags IT REDIS DataStore

// 태그에다 포스트 식별자 입력
> SADD tag:IT:posts 47
> SADD tag:REDIS:posts 47
> SADD tag:DataStore:posts 47

// 태그에 해당하는 게시글 조회
> SMEMBERS tag:IT:posts

// 두 태그의 공통 게시글 조회
> SINTER tag:ID:posts tag:REDIS:posts

랜덤 데이터 추출

  • hash: HRANDFIELD
  • set: SRANDMEMBER
  • sorted set: ZRANDMEMBER

레디스에서의 다양한 카운팅 방법

  • 좋아요 처리하기
    • set을 사용
    • SADD post:<id>:like <userId>
    • SCARD post:<id>:like
  • 읽지 않은 메시지 수 카운팅하기
  • DAU 구하기
  • hyperloglog를 이용한 애플리케이션 미터링

Geospatial Index를 이용한 위치기반 애플리케이션 개발

정리