티스토리 뷰
728x90
반응형
lazy caching
가장 보편적으로 쓰이는 캐시 방식입니다
실제로 object에 대한 요청이 왔을때 캐시를 생성합니다
1. 최신 10개의 뉴스를 가져오는 쿼리를 요청받았다
2. 캐시서버에 해당 캐시를 가지고 있는지 체크한다
3. 캐시가 있다면(cache hit) 캐시된 오브젝트를 리턴한다
4. 캐시가 없다면(cache miss) 데이터베이스에 직접 쿼리하여 생성된 결과로 캐시를 생성하고 결과를 리턴한다
장점
실제로 요청이 왔을때만 캐시가 생성됩니다.
이말은 캐시 크기가 잘 관리되고 있고, 메모리를 효율적으로 잘 사용할수 있다는 말입니다.
대략 코드로 작성해보면 이렇습니다
딱히 파이썬을 알지 못하더라도 이해에 어렵지 않습니다
# Python
def get_user(user_id):
# Check the cache
record = cache.get(user_id)
if record is None:
# Run a DB query
record = db.query("select * from users where id = ?",user_id)
# Populate the cache
cache.set(user_id, record)
return record
# App code
user = get_user(17)
Write-through
데이터베이스에 업데이트가 발생할때 캐싱을 하는 전략입니다.
예를 들면 자신의 프로필이 변경되었을때 변경된 프로필정보를 캐시에 넣습니다
장점
이 전략은 cache miss를 좀더 적극적으로 회피할수 있습니다
단점
불필요한 캐시가(사용되지 않는 프로필, 인기가 없어 조회가 없는 프로필) 저장되기 때문에 메모리 사용이 더 많아지게 됩니다
만약 쓰기 시점에 캐싱에 실패했다면 해당 유저가 프로필을 다시 업데이트하지 않는한 캐시가 생성되지 않습니다
그래서 캐시가 생성되지 못하였을때에 대비하여 위에서 설명한 lazy caching 전략을 함께 사용해야할수도 습니다.
코드로 작성하면 대략 이런 느낌이 되겠죠?
# Python
def save_user(user_id, values):
# Save to DB
record = db.query("update users ... where id = ?", user_id, values)
# Push into cache
cache.set(user_id, record)
return record
# App code
user = save_user(17, {"name": "Nate Dogg"})
728x90
반응형
'WEB2.0 > 프로그래밍' 카테고리의 다른 글
저렴하게 분산 unique primary key 만들기 (0) | 2022.06.28 |
---|---|
hset을 이용하여 메모리 효율적으로 redis에 저장하기 (0) | 2022.06.27 |
github multi account, multiple profile 설정하기 (0) | 2022.06.22 |
kt ucloud object storage 전체 삭제하기 (0) | 2022.06.18 |
IAM을 통해 aws codecommit 사용하기 (0) | 2022.05.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 애플
- 자바스크립트
- 트위터
- 소프트웨어
- AWS
- 네이버
- Apple
- JavaScript
- iPhone
- 대학생
- 어플리케이션
- 아이폰
- 공모전
- CSS
- 벤처
- 구글
- 창업
- 안드로이드
- 앱
- 앱스토어
- 경진대회
- 웹표준
- 게임
- android
- 아이디어
- 모바일
- php
- 스마트폰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함