** 개인적인 학습내용으로 정확하지 않은 부분들이 있을 수 있습니다.
Redis란?
- Redis는 Key-Value 기반의 인메모리 데이터베이스입니다.
- 주요 특징
- Key-Value 기반
- 인메모리
- 고성능
- 다양한 데이터 타입 지원
- String, Sets, Sorted Set, Lists ...
- 싱글 스레드
Redis 용도 예시
- 캐싱
- 세션 관리
- 메시지 브로커
- 게시물 랭킹
- 게임 점수 관리
Redis 명령어
# 데이터 생성
SET key value
# 데이터 조회
GET key
# 데이터 수정
SET key value
# 관리
FLUSHDB # 데이터베이스 초기화
Redis를 이용한 사용자 로그인 여부 확인
- 사용자 토큰 인증
- 사용자의 token을 다음과 같은 형태로 저장한다.
key : users:token:<tokenValue> value : 토큰 관련 정보
- 사용자가 로그인 하면 다음과 같이 토큰 정보를 생성합니다.
redisTemplate.opsForHash().put("users:token", tokenValue, tokenInfo);
- 사용자가 로그인 여부를 확인
TokenInfo tokenInfo = redisTemplate.opsForHash().get("users:token", tokenValue); if(tokenInfo == null) return null; // 이외 토큰 유효성 판별 ...
Redis 캐싱 전략
- Cache Aside 패턴
- Flow
- Cache Store에 검색하는 데이터가 있는지 확인
- Cache Store에 없을 경우 Data Store에 데이터 조회
- Data Store에 조회 해온 데이터를 Cache Store 에 업데이트
- 읽기 및 반복적 호출 적합
- 장애 대비
- Redis가 다운 되더라도 DB에서 데이터를 가져 올 수 있어 서비스 자체는 문제가 없음
- 단 레디스가 다운된 순간, 순간적으로 DB로 몰려서 DB 부하 가능성
- 정합성 문제
- Cache Store와 Data Stroe가 가지고 있는 데이터가 서로 다름
- 캐시 만료 시간 설정: 캐시의 만료 시간을 설정하여 캐시된 데이터가 오래되면 데이터베이스에서 데이터를 다시 읽도록 합니다.
- 캐시 무효화: 캐시된 데이터가 변경되면 데이터베이스에서 데이터를 다시 읽어 캐시를 무효화합니다.
- 데이터베이스 트랜잭션 사용: 데이터베이스에서 데이터를 변경하는 트랜잭션을 사용하면 캐시된 데이터도 자동으로 업데이트됩니다.
- Flow
- Read Through 패턴
- Flow
- Cache Store에 검색하는 데이터가 있는지 확인
- Cache Store에 없을 경우 Data Store에 데이터 조회
- Data Store에 직접 Cache Store 에 업데이트
- Read Through 방식은 Cache Aside 방식과 비슷하지만 Cache Store 에 저장하는 주체가 Server 또는 Data Store 에서 차이점 존재 Cache Aside 방식은 Data Store 로부터 서버가 쿼리 결과를 얻고나서 캐시에 저장
- Read Through 패턴은 초기 데이터는 cache miss 가 항상 발생한다는 단점을 커버할 수 있도록 애플리케이션 측면에서 캐시 대상을 판단하여 Data Store 저장 (Commit) 시 Cache Store 에 쿼리를 동일하게 자동 수행하도록 설정
- 정합성 문제
- Cache Store와 Data Stroe가 가지고 있는 데이터가 서로 다름
- 캐시 만료 시간 설정: 캐시의 만료 시간을 설정하여 캐시된 데이터가 오래되면 데이터베이스에서 데이터를 다시 읽도록 합니다.
- 캐시 무효화: 캐시된 데이터가 변경되면 데이터베이스에서 데이터를 다시 읽어 캐시를 무효화합니다.
- 데이터베이스 트랜잭션 사용: 데이터베이스에서 데이터를 변경하는 트랜잭션을 사용하면 캐시된 데이터도 자동으로 업데이트됩니다.
- Flow
- Write Back 패턴
- Flow
- 모든 데이터를 Cache Store 에 저장
- 일정 시간 후 Data Store에 저장
- 큐 역할, 데이터 베이스에 대한 전체 쓰기를 줄 일 수 있어 해당 비용을 감소
- 정합성 확보
- 캐시 장애시 데이터 유실, 불필요한 리소스 저장
- Write Back 패턴의 경우 Cache Store 가 데이터 저장소 역할을 하면서 동시에 Data Store 에 Write 부하를 줄이기 위한 Queue 역할을 겸하게 됨
- 이로 인해 Database의 부하를 경감시킬 수 있다는 장점 있음
- 대체로 쓰기 작업이 많은 경우 적용을 권고
- Flow
- Write Through 패턴
- Flow
- 모든 데이터를 Cache Store에 저장
- 그리고 바로 Cache Stroe에서 DB로 저장
- 항상 동기화 되어 있어 데이터베이스에 작성할 때마다 캐시에 데이터를 추가
- 캐시와 백업 저장소에 업데이트를 같이 하여 데이터 일관성을 유지할 수 있어서 안정적
- 데이터 유실이 발생하면 안 되는 상황에 적합
- 단 속도가 느린 기억장치에 데이터를 기록할 때 CPU가 대기하는 시간이 필요하기 때문에 성능이 떨어짐
- Wrtie Through 패턴은 Cache Store 에도 반영하고 Data Store에도 동시에 반영하는 방식
- Write Back은 일정 시간을 두고 나중에 한꺼번에 저장
- 그래서 항상 동기화가 되어 있어 항상 최신정보를 가지고 있다는 장점이 있음
- 하지만 결국 저장할 때마다 2단계 과정을 거쳐치기 때문에 상대적으로 느리며 무조건 일단 Cache Store 에 저장하기 때문에 캐시에 넣은 데이터를 저장만 하고 사용하지 않을 가능성이 있어서 리소스 낭비 가능성이 있음
- 이 역시 이를 해결하기 위해 TTL을 꼭 사용하여 사용되지 않는 데이터를 반드시 삭제해야 함
- Flow
'Study > BE' 카테고리의 다른 글
Docker / Docker-Compse (2170) | 2023.08.28 |
---|