[한화시스템 BEYOND SW캠프 7기] #12. Redis

아로롱·2024년 5월 27일

BEYOND SW CAMP 7

목록 보기
12/30

🧱 Redis

  • 고성능의 키-값(key-value) 저장소.
    데이터를 메모리에 저장하여 빠른 읽기와 쓰기를 지원.
    • 고성능 목적으로 사용 => 인증, 캐싱, 재고 관리. 데이터 영구 보관X, 일시적 관리 O
  • 캐싱(임시 저장), 인증 관리, DB동시성 제어 등 다양한 목적으로 사용
  • redis 는 한 번에 한 스레드(싱글 스레드)만 처리하는 대신 매우 빠르다 !
    • 동시성 이슈가 발생하지 않는다 !
  • 주요 특징
    • key : value 로 구성된 단순화 데이터 구조로 sql 쿼리 사용 불필요.
    • key : value 는 구조적으로 해시 테이블 사용 => 매우 빠른 속도로 데이터 검색.
    • 빠른 성능 : 인메모리 데이터베이스로 인해 빠른 성능을 가짐.

🗂️ 자료구조

  • String : 데이터를 value로 저장. 가장 일반적인 key : value의 형태.

    • 관련 문법 : NX 문법, EX 문법
    # nx : not exist
    set user:email:2 hong1@test.com nx # user:email:1 에 값이 nx 할 때만 value를 넣겠다!
    # ex : 만료시간 - 초 단위 > ttl(time to live) = 유효시간
    set user:email:2 hong2@test.com ex 20
  • List : 순서가 있는 문자열 목록.

    • {"hello", "hello1", "hello2"}

    • redis의 list 는 java의 deque 와 같은 구조. 즉, double-ended queue 구조.

    • 데이터 추가 : LPUSH, RPUSH

    • 데이터 추출 : LPOP, RPOP

    • 데이터 개수 : LLEN

      lpush fruits apple
      lpush fruits banana
      lpush fruits kiwi
      
      lpop fruits
      # lpop > kiwi 가 나옴! lpush 했으니까 {kiwi, banana, apple}
      
      # 꺼내서 없애는게 아니라 꺼내서 보기만! (pop은 없어짐)
      lrange fruits -1 -1
      lrange fruits 0 0
  • Sets : 중복을 허용하지 않는 문자열 집합.

    # set 자료구조
    # set 자료구조에 멤버 추가
    sadd members member1
    sadd members member2
    sadd members member1
    
    # set 조회
    smembers members
    # member1 이 중복 => 제거되어있음! set 자료구조는 중복이 제거된다.
    # set 값 개수 조회
    scard members
    # 특정 멤버가 set 안에 있는지 존재 여부 확인
    sismember members member3
    
    #set에서 멤버 삭제
    srem members member2
    
    # 매일 방문자 수 계산
    # 같은 사람이 여러번 반복해도 오르지 않도록.
    # 금일 날짜를 key 값으로 방문자 수를 계산.
    sadd visit:2024-05-27 hong1@naver.com
    sadd visit:2024-05-27 hong2@naver.com ...
    sacrd visit:2024-05-27
  • Sorted Sets : 점수가 할당된 문자열로 이루어진 집합.

    • Score 기준으로 정렬.
    # zset(sorted set)
    zadd zmembers 3 member1
    zadd zmembers 4 member2
    zadd zmembers 1 member3
    zadd zmembers 2 member4
    
    # score기준 오름차순 정렬 / 내림차순 정렬
    zrange zmembers 0 -1
    zrevrange zmembers 0 -1
    
    # 최근 본 상품 목록
    zadd recent:products 192402 melon
    zadd recent:products 192411 appple
    zadd recent:products 192413 appple
    zadd recent:products 192415 banana
    zadd recent:products 192420 kiwi
    zadd recent:products 192422 appple
    zadd recent:products 192431 appple
    
    zrevrange recent:products 0 2 # apple은 덮어씌워지기 때문에 조회시 마지막 apple, banana, kiwi 조회됨.
  • Hashes : key : value 로 이루어진 맵 구조. 객체와 비슷한 데이터 구조를 가짐.

    # hashes
    # 해당 자료구조에서는 문자와 숫자가 구분됨. apple > ""로 문자 구분지어줌.
    hset product:1 name "apple" price 1000 stock 50
    hget product:1 price # price 를 name, stock 등으로 교체 > 해당 값 조회
    # 모든 객체 값 get
    hgetall product:1
    # 특정 요소 값 수정
    hset product:1 stock 40
    
    # 특정 요소 값 증가 / 감소
    hincrby product:1 stock 5 # -5 하면 감소
    hget product:1 stock

String : key:value ⇒ 좋아요, 재고 관리
list : key:value, value가 리스트 형식인데 deque 형식 ⇒ 최근 방문 페이지
set : 중복 제거, 순서 없음 ⇒ 오늘 방문자 수
zset : set 인데 순서 있는 set. → score : 시간으로 가장 많이 사용 ⇒ 최근 본 상품 목록
hset(hashes) : 객체 형식으로 value 값. 숫자 연산의 편의. hincrby.

📑 DB서버 구성 (고가용성으로 구성 가능 !)

  • Replication (복제)

    하나의 마스터 서버가 쓰기 작업을 처리하고, 여러 슬레이브 서버가 마스터의 데이터를 복제하여 읽기 작업을 처리.

  • Clustering (클러스터 구성)

    Redis 클러스터는 데이터를 여러 노드에 분산하여 저장함으로써 고가용성확장성을 제공.

profile
Dilige, et fac quod vis

0개의 댓글