【问题标题】:How to cache RSS feed?如何缓存 RSS 提要?
【发布时间】:2012-10-01 16:39:09
【问题描述】:

我使用来自 GAE NDB 数据存储的最新 10 条记录生成 RSS 提要。数据库中的记录每周更新一次。每次用户请求显示 RSS 提要时,如何避免对数据存储的查询? IE。怎么缓存?

【问题讨论】:

    标签: google-app-engine caching rss


    【解决方案1】:

    您可以使用 memcache 来避免每次都访问数据存储。您可能知道查询不会缓存在 NDB 中。

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

    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 中以备下次使用。

    上面的示例使用 60 秒超时(.add 调用中的值 60)只需保留该参数即可让数据在内存缓存允许的情况下持续存在。

    同样来自一个类似的问题:NDB Caching When Using Projected Queries

    key.get() 将被缓存并从缓存中检索,但 query.get() 不会从缓存中检索。 https://developers.google.com/appengine/docs/python/ndb/cache

    来自文档:查询不会在任何缓存中查找值。但是,如果缓存策略这样写,查询结果将被写回上下文缓存(但绝不会写回 Memcache)。

    因此,如果您通过密钥获取,您将自动从 NDB 缓存中获取(如果可用),但我个人没有使用过。

    因此,构建您的 RSS 内容并在渲染之前将其保存到内存缓存中。然后,当您更新它创建的内容时,只需使缓存版本无效(请参阅文档),以便下一个请求将从数据存储中获取它,然后您可以将其放回缓存中。

    【讨论】:

    • 谢谢! construct your RSS content and just before you render or it, save it to memcache 是关键!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-13
    • 2023-03-17
    • 2017-10-25
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多