我在谷歌应用引擎上的应用程序返回内容项(只是文本)和对它们的评论。它的工作原理如下(伪代码):
query: get keys of latest content #query to datastore
for each item in content
if item_dict in memcache:
use item_dict
else:
build_item_dict(item) #by fetching from datastore
store item_dict in memcache
send all item_dicts to template
很抱歉,如果代码不可理解。我获取了所有内容词典并将它们发送到模板,模板使用它们来创建网页。
我的问题是,如果memcache已经过期,对于我要显示的每个项目,我必须(1)在memcache中查找项目,(2)因为不存在memcache我必须从数据存储区中获取项目,并且(3) )将项目存储在memcache中。这些电话很快就会建立起来。
我没有为memcache的条目设置过期时间,所以这实际上只发生在早上一次,但是网页需要足够长的时间来加载(~1秒)浏览器将其报告为不存在。通常情况下,我的网页需要大约50毫秒才能加载。
这种方法适用于频繁访问,但它有如上所示的缺陷。我该如何解决这个问题?这些条目足够动态,我认为缓存初始请求符合我的最佳利益。
提前致谢
答案 0 :(得分:3)
您可以在memcache和数据存储上执行批量操作 - 并将所有这些操作减少到memcache的一次往返,以及针对任何缺少的条目的额外数据存储和memcache往返。请参阅memcache.get_multi and set_multi和db.get上的文档。
我没有为此设置过期时间 memcache的条目,所以这个 真的只发生过一次 早上,但网页需要很长时间 足以加载(~1秒)的那个 浏览器报告它不存在。
咦?您的浏览器会在1秒后放弃吗?