python - 在 App Engine 应用程序中放置缓存驱逐逻辑的最佳位置在哪里?

标签 python google-app-engine optimization caching memcached

我已经为 Google AppEngine 编写了一个应用程序,我想利用 memcache API 来减少每个请求的 CPU 时间。我分析了应用程序,发现大部分 CPU 时间用于模板渲染和对数据存储的 API 调用,在与同事聊天后,我跳出(可能有点早?)得出的结论是缓存一个页面呈现的 HTML block 将显着减少每个请求的 CPU 时间。缓存模式非常简洁,但是将这种缓存和驱逐逻辑放在哪里的问题对我来说有点神秘。

例如,假设一个应用程序的主页有一个公告部分。这部分需要在以下之后重新渲染:

  • 帐户中任何人的第一次阅读,
  • 正在添加新公告,以及
  • 旧公告被删除
  • evict_announcements_section_from_cache() 放置位置的一些选项方法调用:
  • 在公告模型的.delete() , 和 .put()方法
  • 在 RequestHandler 的 .post()方法
  • 其他地方?

  • 然后在 RequestHandler 的获取页面中,我可能会调用 get_announcements_section()这将遵循标准的内存缓存模式(检查缓存,在未命中时添加到缓存,返回值)并将该 HTML 传递给该页面 block 的模板。

    将缓存驱逐逻辑放在模型、 Controller /请求处理程序或其他地方是典型的设计模式吗?理想情况下,我想避免在代码中使用触手来驱逐逻辑。

    最佳答案

    我在一个开源 Github 项目中就有这样一个装饰器:

    http://github.com/jamslevy/gae_memoize/tree/master

    它更深入一点,允许强制执行函数(当你想刷新缓存时)或强制本地缓存......这些正是我在我的应用程序中需要的东西,所以我将它们烘焙到我的memoize 装饰器。

    关于python - 在 App Engine 应用程序中放置缓存驱逐逻辑的最佳位置在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1313626/

    相关文章:

    Python 正则表达式 : adding space after comma only if not followed by a number

    python - 如果我希望用户输入的数据具有特定格式,如何在python 3中设置格式检查?

    c - 调整存储为 'strided' 数组 : can I make this bilinear interpolation faster? 的图像的大小

    multithreading - 如何针对给定的多核架构优化算法

    python - 如何解决python中的 “IndexError: string index out of range”错误?

    python pandas 根据字符串条件删除行

    google-app-engine - 如何下载google app engine go sdk?

    java - openPrefetchingReadChannel 在 Google 云存储客户端 API 中不起作用

    google-app-engine - 使用 App Engine VM 时总是得到 "502 Bad gateway"

    c# - C#集合初始化语法是否避免默认初始化开销