[Redis] Redis 활용 예제

hwwwa·2023년 1월 22일
0
post-thumbnail
post-custom-banner

Redis 활용 예제

Indexing Patterns

  • key가 아닌 다른 값으로 데이터를 찾고 싶다면 indexing 작업 필요
  • Sorted Set은 Indexing을 제공하는 대표적인 자료 구조

사전순 정렬

  • Sorted Set에서 모든 score를 0으로 설정하면 사전순으로 데이터 정렬 가능
  • 대/소문자 구분 불가, 한글 등 적용 불가

최근 검색 목록 표시

  • Sorted set 사용 시 sorting 과정이 필요 없어지며 중복값도 저장되지 않음
  • score는 타임스탬프, value는 검색한 내용
  • 새로운 데이터를 추가하면 타임스탬프 순으로 자동 정렬됨
  • 5개까지만 표시한다고 가정 시 새로운 데이터를 저장함과 동시에 [-6] 인덱스를 제거해주면 오버헤드 감소
    • 값이 없는 경우에 수행하여도 에러 발생 X. 아무 일도 수행되지 않음

Communication Patterns

Event Queue

  • List 활용
  • Blocking 기능
    • pop/push의 polling 프로세스를 줄일 수 잇음
    • BRPOP key timeout을 사용하여 데이터의 입력을 기다림
    • time out을 0으로 설정하면 영원히 기다림
  • Exists 기능
    • ex) 트위터 timeline cache는 redis를 사용하여 구현됨
    • user별 timeline caching
    • RPUSHX를 사용해 이미 캐싱되어있는 사용자의 피드에만 추가
    • 잘 접속하지 않는 사용자에게는 추가해주지 않아도 됨

Pub/Sub 기능

  • Subsribe : 지정한 채널로 보내진 메세지를 받음

    SUBSCRIBE channel [channel ...]
  • Publish : 메세지를 지정한 채널로 보냄

    PUBLISH channel message
  • 매우 빠르고 구현 간단

  • 전달 보장 X

  • 어디까지 읽었는지 모름

    • fire & forget
  • 메세징 중 가장 간단

  • subscribe

  • publish

Counting Patterns

일일 순 방문자 수 구하기

  1. string을 통한 단순 증감 연산
    • Hash 안의 어떤 아이템 지정 가능 -> 동일하게 카운팅
  2. Bits
    • string의 일종
    • SETBIT으로 각 bit를 on/off
    • BITCOUNT로 전체 방문자 수를 계산
    • 데이터 저장 공간이 절약됨
    • 정수 카운팅만 가능
  3. HyperLogLogs
    • Redis, ElasticSearch 등에서 지원
    • 오직 12KB의 저장공간만 사용
    • 집합의 카디널리티 계산 시 사용
    • 데이터의 내용 확인 없이 들어갔는지의 여부만 확인
    • 대용량 데이터 카운팅에 사용
    • 저장된 데이터를 다시 확인 불가
    • 오차는 1% 미만
    • ex) 미터링(클라우드 과금 지표)에 사용
      • 로그 수집 상품은 row당 미터링 -> 로그 ID 값만 넣어서 저장
post-custom-banner

0개의 댓글