我已经为Google AppEngine编写了一个应用程序,我想利用memcache API来减少每个请求的CPU时间。我已经分析了应用程序,发现大部分CPU时间都在模板渲染和对数据存储区的API调用中,在与同事聊天后,我跳了起来(可能有点早?)得出缓存的结论页面的大量渲染HTML会大大减少每个请求的CPU时间。缓存模式非常干净,但 的问题将这种缓存和驱逐逻辑放在我身上对我来说有点神秘。
例如,假设某个应用程序的主页面有一个“通知”部分。此部分需要在以下情况后重新呈现:
调整evict_announcements_section_from_cache()
方法调用的位置的一些选项:
.delete()
和.put()
方法中的.post()
方法然后在RequestHandler的get页面中,我可能会调用get_announcements_section()
,它将遵循标准的memcache模式(检查缓存,在miss上添加缓存,返回值)并将该HTML传递给该块的模板页面。
将高速缓存驱逐逻辑放入模型,Controller / RequestHandler或其他地方是典型的设计模式吗?理想情况下,我希望避免在整个代码中使用触角驱逐逻辑。
答案 0 :(得分:1)
我在开源Github项目中有这样一个装饰器:
http://github.com/jamslevy/gae_memoize/tree/master
它有点深入,允许强制执行函数(当你想刷新缓存时)或强制本地缓存......这些只是我在我的应用程序中需要的东西,所以我烤了他们进入我的memoize装饰。
答案 1 :(得分:1)
定期驱逐的几种替代方法: