Google AppEngine 용 애플리케이션을 작성했으며 요청 당 CPU 시간을 줄이기 위해 memcache API를 사용하고 싶습니다. 필자는 응용 프로그램을 프로파일 링하여 CPU 시간의 상당 부분이 데이터 렌더링에 대한 템플릿 렌더링 및 API 호출에 있으며 동료와 채팅 한 후 (아마도 조금 일찍?) 캐싱에 대한 결론에 이르렀습니다. 페이지 렌더링 HTML의 청크 (chunk)는 요청 당 CPU 시간을 상당히 줄입니다. 캐싱 패턴은 꽤 깨끗하지만, 의 질문은 캐싱과 추론의 논리를 내세우는이 내게 약간의 수수께끼입니다.AppEngine 애플리케이션에 캐시를 제거하는 로직을 배치하는 가장 좋은 장소는 어디입니까?
예를 들어, 응용 프로그램의 기본 페이지에 공지 섹션이 있다고 가정합니다.
- 먼저 새 발표는 추가되는
- 계정에있는 사람을위한 읽기, 및
- 오래된 발표가 삭제되는
일부 :이 부분은 후에 다시 렌더링 될 필요가있을 것이다 evict_announcements_section_from_cache()
메서드 호출 위치에 대한 옵션 :
- 발표 모델의
.delete()
및.put()
방법 - RequestHandler의
.post()
방법 - 다른 어느 곳에서든지?
그런 다음 RequestHandler를의 페이지 가져 오기에, 나는 잠재적으로 표준 memcache에 패턴 (미스, 반환 값에 캐시에 추가 캐시를 확인)을 따를 것이다 get_announcements_section()
를 호출 할 수 있고 그 덩어리를위한 템플릿에 아래로 그 HTML을 통과 그 페이지.
캐시 - 추론 논리를 Model 또는 Controller/RequestHandler 또는 다른 곳에 두는 것이 일반적인 디자인 패턴입니까? 이상적으로 나는 코드 전체에 촉수가있는 논리를 피하는 것을 피하고 싶습니다.
http://github.com/jamslevy/gae_memoize/tree/master
그것은 함수의 실행을 강제로 같은 일을 가능하게, 깊이있는 조금 더 (당신이 원하는 때