[Redis] Redis 자료구조

maxxyoung·2025년 2월 5일
  • RDB는 데이터를 안전하게 영구 저장하는 것이 주요 목적이지만, Redis는 주로 빠른 접근을 위한 캐시 및 일시적인 데이터 저장 용도로 사용됨
  • 하나의 Redis DB 서버에서 다양한 목적의 DB를 분리시킬 수 있음
    • 0 ~ 15까지의 총 16개의 DB가 존재한다.

Strings

  • 데이터를 String 형태의 값으로 저장, 가장 일반적인 key - value 구조의 형태
  • 관련 명령어
    • 키 값을 설정: set key vlaue
    • 키 값을 가져옴: get key
    • NX 문법(if not exist)
      • key 값이 존재하지 않는다면 값 setting
      • set key value nx
    • EX 문법(expiration)
      • key 유지(만료) 시간 세팅
      • set key값 value값 nx ex
      • expire key값 3600 형식으로 별도 부여 가능
      • TTL이라 부르기도 함, ttl key값 명령어를 통해 남은 만료시간 확인 가능
  • 활용
    • 동시성 이슈 -> 레디스는 싱글 스레드 기반으로 동작하기 때문에 동시성 이슈를 해결할 수 있음
      • 좋아요 기능 구현
      • 재고 처리
      set post1
      incr post1
      decr post1
      get post1
    • 캐싱처리 -> JSON 형식의 데이터를 value값으로 많이 사용
      • 사용자 인증정보 저장(ex-refresh 토큰)
      • 매우 빈번한 리프레시 토큰 접근이 필요해여 redis 사용

Lists

  • deque와 유사한 구조로 리스트 앞, 뒤에서 push, pop 가능, 리스트 중간에 데이터 삽입 불가
  • 관련 명령어
    • 데이터 추가: lpush key value(left), rpush key value(right)
    • 데이터 추출: lpop key, rpop key
    • 데이터 개수 조회: llen key(list length)
    • expire 설정 가능, ttl로 남은 시간 조회할 수 있음
  • 활용
    • 웹사이트 최근 방문
    • 최근 살펴본 상품 리스트

Sets

  • 순서가 없고 중복이 없는 자료 구조
  • 관련 명령어
    • 집합에 멤버 추가: sadd key value
    • 집합의 모든 멤버 반환: smemebers key
    • 집합의 멤버 개수 반환: scard key (cardinality)
    • 특정 멤버 삭제: srem key value
  • 활용
    • 매일 방문자 수 계산
    • 좋아요 수 중복없이 집계

Sorted Sets(zset)

  • 순서가 있고 중복이 없는 자료 구조
  • 정렬의 기준이 되는 score를 가지고 있는 set
    • 보통 timestamp(초)값을 많이 활용
  • 관련 명령어
    • 집합에 멤버 추가: zadd key score value
    • 특정 멤버 삭제: zrem key value
    • 특정 멤버의 위치 정보 반환: zrank key value(오름차순 기준)
    • score기준 오름차순 조회: zrank key 0 -1 (처음부터 끝까지)
    • score기준 내림차순 조회: zrevrange key 0 -1
    • range명령어 사용 시 제일 마지막에 withscores를 붙이면 score까지 함께 반환
    • 새로운 값을 추가 시 중복값이라면 나중값이 우선시되어 먼저 들어값을 덮어쓴다.
  • 활용
    • 주식, 코인 등의 실시간 시세정보 또는 게임 등의 사용자의 점수나 순위를 관리
    • 최근 살펴본 상품

Hashes

  • value의 값이 map형태인 자료 구조
  • hash는 map형식의 자료 구조를 활용해 특정 데이터만 수정/삭제 용이
  • 관련 명령어
    • hset key key value
    • hget key key
    • hgetall key
    • hincrby key key (특정 요소값의 값을 증가/감소 시킬 경우, 숫자는 내부적으로 숫자로 처리)
  • 활용
    • 빈번히 변경될 가능성이 있는 객체 형식의 데이터 캐싱

출처 - 개발자라면 알아야 할 Redis 기본

profile
오직 나만을 위한 글. 틀린 부분 말씀해 주시면 감사드립니다.

0개의 댓글