Database Google应用程序引擎的缓存问题

Database Google应用程序引擎的缓存问题,database,google-app-engine,caching,object,memcached,Database,Google App Engine,Caching,Object,Memcached,我试图学习如何使用memcache来减少数据库的负载。因此,我有一个cacheData函数,当给定一个键(在本例中为“条目”)时,它可以缓存博客文章。问题是,当我在博客上发表一篇新文章并进行数据库查询时,尽管新文章被添加到数据库中,但它不会返回任何值。为什么在我的数据库查询之后条目没有返回 cacheData函数: def cacheData(key, update = False): value = memcache.get(key) if value is None or

我试图学习如何使用memcache来减少数据库的负载。因此,我有一个cacheData函数,当给定一个键(在本例中为“条目”)时,它可以缓存博客文章。问题是,当我在博客上发表一篇新文章并进行数据库查询时,尽管新文章被添加到数据库中,但它不会返回任何值。为什么在我的数据库查询之后条目没有返回

cacheData函数:

def cacheData(key, update = False):
     value = memcache.get(key)
     if value is None or update:
         logging.error("DATABASE HIT")
         value = db.GqlQuery("select * from Entry order by date desc")
         value = list(value) #returns 0 when entry is added...
         logging.error("value has: " + str(len(value)) + " items")
         memcache.set(key,value)
     return value
这是在数据库中输入数据的方法:

def post(self):

    error = "You are missing a title or blog entry!"
    title = self.request.get("subject")
    blog = self.request.get("content")

    if (title and blog):
        blogEntry = Entry(title = title, blogText = blog)
        blogEntry.put()
        cacheData("entries", update = True)
        self.redirect("/blog")

    else:
        self.renderPostPage(title = title, blog = blog, error = error)

这可能是最终的一致性问题。我很好奇,您的cacheData只尝试从memcache中获取一个条目,您确实选择了*(获取所有实体)。我相信如果你试着用钥匙取,它会很稳定。另一个解决方法是在调用.put()将数据持久化到数据存储中之后,还要更新memcache。

cacheData不是只获取一个条目,而是获取所有条目,然后将其加载到博客的首页。这就是为什么我在执行数据存储查询后将其转换为列表对象。等等,我想我误解了,您将所有条目存储在一个键中?我以为你把它存储为每个条目一个键。你能试试这个吗,value=db.get(Entry.all(keys_only=True).fetch(1000))它仍然没有改变任何东西。是的,这些条目存储在一个单键中,所以我可以一次在头版上显示它们。您希望条目有多大?如果超过1MB,您将遇到问题。此外,在生产过程中的任何时候都可以从memcache中删除内容。