设置Google Cloud App以创建缓存和可能的请求超时的方法?

时间:2015-05-08 15:32:36

标签: google-app-engine google-compute-engine

我有RSS feed第三方网站,它创建存储在缓存文件夹中的缓存。每次请求第一次需要25-40秒,然后从缓存中提供9-10分钟。

问题1:GAE不提供写入文件系统。那我该如何提供缓存呢?

问题2:缓存超时后,请求每次需要25-40秒。我该怎么办?

有没有办法解决这个问题,或者我是否需要使用提供这两种设施的Google Compute Engine

我读过关于此的文章,但没有直接回答我的问题。在这里发布前2天就被困在这里了。谢谢。

2 个答案:

答案 0 :(得分:0)

只需在HTTP响应中发回必要的缓存头即可缓存Appengine。

使用task queue查询用户请求之外的下一个结果,并准备要在数据存储区和/或内存缓存中提供的新数据。然后,后续用户请求可以快速提供可用的最新数据,而无需设置延迟。

答案 1 :(得分:0)

不使用文件系统存储文本,而是在NDB数据存储区中使用TextProperty。给它一个唯一的密钥,以便将来可以请求它。

这也解决了你的缓存问题。通过密钥请求实体将使用内置的cache,或者如果它不在缓存中,它将从数据存储区中获取它。

然后添加一个cron作业,每隔十分钟更新数据存储区。

class RssFeed(ndb.Model):
    KEY = 'RSS'
    cache = TextProperty()
    last_updated = DateTimeProperty(auto_now=True)

    @classmethod
    def update(cls):
        # insert your code to fetch from the RSS feed
        # cache = ...
        rss_feed = cls.get_or_insert(key=self.KEY)
        rss_feed.cache = cache
        rss_feed.save()

    @classmethod
    def fetch(cls):
        rss_feed = cls.get_by_id(self.KEY)
        return rss_feed.cache

只要您想要缓存数据,请致电RssFeed.update()更新缓存和RssFeed.fetch()