2012-10-01 6 views
0

GAE NDB 데이터 스토어에서 최신 10 개의 레코드로 RSS 피드를 생성합니다. 데이터베이스의 레코드는 매주 업데이트됩니다. 사용자가 RSS 피드를 요청할 때마다 데이터 저장소에 대한 쿼리를 피하는 방법은 무엇입니까? 나는. 캐시하는 방법?RSS 피드를 캐시하는 방법은 무엇입니까?

답변

2

memcache를 사용하여 매번 데이터 저장소에 도달하지 않도록 할 수 있습니다. 아마도 쿼리는 NDB에 캐싱되지 않습니다.

def get_data(): 
    data = memcache.get('key') 
    if data is not None: 
     return data 
    else: 
     data = self.query_for_data() 
     memcache.add('key', data, 60) 
     return data 

그래서 즉, memcache에에서 데이터를 가져 오기 위해 노력하고 데이터 저장소에서 얻을 실패하면 다음 다음 번 라운드에서 Memcache에 추가

https://developers.google.com/appengine/docs/python/memcache/usingmemcache

.

위의 예제에서는 60 초 제한 시간 (.add 호출에서 값 60)을 사용합니다. memcache가 허용하는 한 데이터를 지속 시키려면 해당 인수를 그대로 두십시오. 비슷한 질문에서 또한

: NDB Caching When Using Projected Queries

key.get()는 캐시와 캐시에서 검색하지만, query.get()는 캐시에서 검색되지 않습니다됩니다. https://developers.google.com/appengine/docs/python/ndb/cache

docs : 쿼리는 모든 캐시에서 값을 조회하지 않습니다. 그러나 캐시 정책이 그렇게 말하면 쿼리 결과는 컨텍스트 캐시에 다시 쓰여지지만 Memcache에는 쓰지 않습니다.

그렇다면 키를 얻으면 대신 NDB 캐시에서 자동으로 가져 오지만 사용할 수는 있지만 개인적으로 사용하지 않은 것으로 보입니다.

그래서 RSS 내용을 구성하거나 렌더링하기 직전에 memcache에 저장하십시오. 그런 다음 생성 된 내용을 업데이트하면 캐시 된 버전 (docs 참조)이 무효화되므로 다음 요청이 데이터 저장소에서 가져와 캐시로 다시 가져올 수 있습니다.

+0

감사합니다. '당신의 RSS 컨텐츠를 만들고 당신이 렌더링하기 바로 전에, 그것을 memcache에 저장하십시오. '가 열쇠입니다! –

관련 문제