Python 在AppEngine应用程序中放置缓存逐出逻辑的最佳位置是哪里?
我已经为GoogleAppengine编写了一个应用程序,我想利用MemcacheAPI来减少每个请求的CPU时间。我对应用程序进行了分析,发现大部分CPU时间用于模板呈现和对数据存储的API调用,在与同事聊天后,我突然(可能有点早?)得出结论,缓存页面呈现HTML的一块将显著减少每个请求的CPU时间。缓存模式非常干净,但是将缓存和逐出的逻辑放在哪里对我来说有点神秘 例如,假设应用程序的主页上有一个公告部分。本节需要在以下情况下重新呈现:Python 在AppEngine应用程序中放置缓存逐出逻辑的最佳位置是哪里?,python,google-app-engine,optimization,caching,memcached,Python,Google App Engine,Optimization,Caching,Memcached,我已经为GoogleAppengine编写了一个应用程序,我想利用MemcacheAPI来减少每个请求的CPU时间。我对应用程序进行了分析,发现大部分CPU时间用于模板呈现和对数据存储的API调用,在与同事聊天后,我突然(可能有点早?)得出结论,缓存页面呈现HTML的一块将显著减少每个请求的CPU时间。缓存模式非常干净,但是将缓存和逐出的逻辑放在哪里对我来说有点神秘 例如,假设应用程序的主页上有一个公告部分。本节需要在以下情况下重新呈现: 首先为帐户中的任何人阅读 正在添加新公告,以及 正在删
- 首先为帐户中的任何人阅读
- 正在添加新公告,以及
- 正在删除旧公告
execut\u announcements\u section\u from\u cache()
方法调用放置在何处的一些选项:
- 在公告模型的
和.delete()
方法中.put()
- 在RequestHandler的
.post()方法中
- 还有别的地方吗
get\u announcements\u section()
,它将遵循标准的memcache模式(检查缓存、在未命中时添加到缓存、返回值),并将该HTML向下传递给该页面块的模板
将缓存逐出逻辑放在模型、控制器/请求处理程序或其他地方是典型的设计模式吗?理想情况下,我希望避免在代码中使用触角遍布的逐出逻辑。在开源Github项目中,我有这样一个装饰器:
它更深入一点,允许强制执行函数(当你想刷新缓存时)或强制本地缓存……这些正是我在应用程序中需要的东西,所以我将它们烘焙到我的memoize装饰器中。常规逐出的两种替代方案: