티스토리 뷰

WEB2.0/프로그래밍

캐싱(caching) 전략

나를찾는아이 2022. 6. 24. 07:01
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
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함