Database

Redis(1)

MIRACLE LIFE 2023. 6. 7. 23:37

레디스란?

- 인메모리

- 오픈소스

- 지원하는 데이터 구조

  • Strings, set, sorted-set, hashes, list
  • Hyperloglog, bitmap, geospatial index
  • Stream

캐시란?

- 나중 요청의 결과를 미리 저장해두었다가 빠르게 제공해주는것을 의미

 

  •  캐시 구조1 - Look aside Cache : 일반적인 캐시 구조
  • 동작 방식
  1. 웹서버는 데이터가 존재하는지 캐시를 먼저 확인
  2. 캐시에 데이터가 있으면 캐시에서 가져옴
  3. 캐시에 데이터가 없으면 디비에서 가져옴
  4. 디비에서 가져온 데이터를 캐시에 저장

 

  • 캐시 구조2 - Write Back : 데이터를 캐시에 먼저 저장했다가 특정 시점마다 디비에 저장
  • 동작 방식
  1. 웹서버는 모든 데이터를 캐시에만 저장
  2. 캐시에는 특정 시간동안 데이터가 저장
  3. 캐시에 있는 데이터를 디비에 저장
  4. 캐시에 저장된 데이터를 삭제
  • 데이터가 아직 디비에 저장되기 전에 장애가 생기면 데이터가 사라질 위험이 있음
  • 로그를 디비에 저장하거나 무거운 쓰기 작업에 주로 사용

왜 Collection이 중요한가?

  • 개발의 편의성
    • 랭킹 서버를 직접 구현한다면?
      • score로 orderby 정렬 후 읽어오면 됨
      • 개수가 많아지면 속도에 문제가 발생할 수 있음(결국은 디스크를 사용하므로)
    • Redis의 Sorted Set을 이용하면 쉽게 구현 가능
  • 개발의 난이도
    • 친구 리스트를 관리한다면?
      • 친구 추가시 Race Condition이 발생할 수 있음
    • Redis의 경우 자료구조가 Atomic 하기 때문에, Race Condition을 피할 수 있음
  • 결론 - 외부의 Collection을 잘 이용하는 것으로, 여러가지 개발 시간을 단축시키고, 문제를 줄여줄 수 있기 때문에 Collection이 중요

Redis 사용처

  • Remote Data Store
    • A, B, C서버에서 데이터를 공유하고 싶을때
  • 주로 많이 쓰는 곳들
    • 인증 토큰 등을 저장(Strings 또는 hash)
    • Ranking 보드로 사용(Sorted Set)
    • 유저 API Limit
    • 잡 큐(list)

Redis Collections

올바른 자료구조를 선택하는 게 매우 중요

  • Strings
  • List
  • Set : 데이터가 있는지 없는지만 체크하는 용도
    • 특정 유저를 팔로우하는 목록 저장
  • Sorted Set
    • 유저 랭킹 보드로 사용
    • Sorted Set의 score는 double 타입이기 때문에, 값이 정확하지 않을 수 있음
  • Hash : Key 밑에 sub key가 존재

Collection 주의 사항

  • 하나의 컬렉션에 너무 많은 아이템을 담으면 좋지 않음
    • 10000개 이하 몇천개 수준으로 유지하는게 좋음
  • Expire는 Collection의 item 개별로 걸리지 않고 전체 Collection에 대해서만 걸림
    • 즉 10000개의 아이템을 가진 Collection에 expire가 걸려있다면 그 시간 후에 10000개의 아이템이 모두 삭제

 

 

출처: https://www.youtube.com/watch?v=mPB2CZiAkKM 

 

'Database' 카테고리의 다른 글

MySQL(1)  (0) 2023.09.17
Redis(2)  (0) 2023.06.11
[MongoDB] 데이터베이스 연동하기(2)  (2) 2023.03.13
[MongoDB] 데이터베이스 연동하기(1)  (0) 2023.03.13
TIL. 인덱스(INDEX)  (0) 2023.02.09