Redis 와 캐싱 · 캐시 패턴(look-aside·write-through) · 퀴즈
퀴즈: 캐시 패턴과 스탬피드
문항 6개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
cache-aside 에서 쓰기 시 캐시를 삭제하는 이유는?
- 삭제가 갱신보다 빠른 연산이라서
- 값을 지워 캐시 메모리를 아낄 수 있어서
- 어차피 TTL 이 값을 정리해 주기 때문
- 두 쓰기가 엇갈릴 때 갱신은 옛 값을 남길 수 있지만 삭제는 그렇지 않아서
write-behind 를 쓸 수 있는 조건은?
- 쓰기보다 읽기가 훨씬 많을 때
- 한 건의 데이터 크기가 작을 때
- TTL 을 길게 잡아 둘 수 있을 때
- 유실을 감당할 수 있거나 별도의 내구성 장치가 있을 때
캐시 스탬피드에서 '인기 있는 키일수록 위험하다'는 역설의 이유는?
- 자주 읽히는 값일수록 만료 순간의 동시 미스 수가 크기 때문
- 인기 있는 값일수록 크기가 커서
- 인기 있는 키에 짧은 TTL 을 주게 되어서
- 인기 있는 키가 메모리를 많이 차지해서
분산 잠금에서 소유권 토큰이 없으면 생기는 문제는?
- 잠금 확인이 늘어 성능이 떨어진다
- 해제되지 않은 잠금 키가 쌓여 메모리가 샌다
- 늦게 깨어난 원래 소유자가 남의 잠금을 해제해 상호 배제가 깨진다
- 만료 시각을 알 수 없어 TTL 이 무의미해진다
stale-while-revalidate 가 잠금 방식보다 나은 점은?
- 원본 호출 횟수가 0 으로 줄어든다
- 대기자가 기다리지 않고 즉시 (조금 낡은) 값을 받는다
- 옛 값을 지워 메모리를 덜 쓴다
- 잠금 코드가 없어 구현이 쉽다
실무에서 스탬피드 방어책을 하나만 고르지 않고 조합하는 이유는?
- 세 기법이 스탬피드의 서로 다른 국면을 각각 해결하기 때문
- 캐시 규격이 세 가지를 함께 쓰도록 정해서
- 겹쳐 쓸수록 캐시 적중률이 올라가서
- 하나만 쓰면 라이선스 비용이 더 들어서