레디스란?
- 인메모리
- 오픈소스
- 지원하는 데이터 구조
- Strings, set, sorted-set, hashes, list
- Hyperloglog, bitmap, geospatial index
- Stream
캐시란?
- 나중 요청의 결과를 미리 저장해두었다가 빠르게 제공해주는것을 의미
- 캐시 구조1 - Look aside Cache : 일반적인 캐시 구조
- 동작 방식
- 웹서버는 데이터가 존재하는지 캐시를 먼저 확인
- 캐시에 데이터가 있으면 캐시에서 가져옴
- 캐시에 데이터가 없으면 디비에서 가져옴
- 디비에서 가져온 데이터를 캐시에 저장
- 캐시 구조2 - Write Back : 데이터를 캐시에 먼저 저장했다가 특정 시점마다 디비에 저장
- 동작 방식
- 웹서버는 모든 데이터를 캐시에만 저장
- 캐시에는 특정 시간동안 데이터가 저장
- 캐시에 있는 데이터를 디비에 저장
- 캐시에 저장된 데이터를 삭제
- 데이터가 아직 디비에 저장되기 전에 장애가 생기면 데이터가 사라질 위험이 있음
- 로그를 디비에 저장하거나 무거운 쓰기 작업에 주로 사용
왜 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 |