我正在谷歌应用程序引擎上使用python和jinja2构建一个web应用程序。我有一个网站,用户可以写文章,我有15个主要类别,每个有4个部门。现在我想实现内存缓存,因为我有一个20:1的阅读器与海报比例,但我怎么能做到这一点,而不需要制作60个不同的键?我应该这样做吗?或者我应该打在数据库和结果进行排序,并且对能使那些结果,像这样的功能的一些参数:如何实现许多类别的memcache
def posts_cache(update = False, category = None, sport = None):
key = 'main'
posts = memcache.get(key)
if posts is None or update:
logging.error("DB QUERY")
posts = db.GqlQuery("SELECT * "
"FROM Post "
"ORDER BY created DESC "
"LIMIT 100",
key)
posts = list(posts)
memcache.set(key, posts)
if category and sport:
sportcatlist = []
for post in posts:
if post.category == category:
if post.sport == sport:
sportcatlist.append(post)
return sportcatlist
elif category:
categorylist = []
for post in posts:
if post.category == category:
categorylist.append(post)
return categorylist
elif sport:
sportlist = []
for post in posts:
if post.sport == sport:
sportlist.append(post)
return sportlist
return posts
或者是有一个更有效的方式来做到这一点?
我不认为你的解决方案会扩展。如果您获得大量帖子,那么您将无法将这些详细信息填充到单个memcache记录中(确定您当前将结果集限制为100)。我认为你应该考虑分割缓存 - 每个分类一次。另外,我觉得你可以通过在创建帖子时为每个类别创建简要记录来提高效率。然后,当您获取这些内容时,将它们缓存在内存缓存中。 (并在更新类别时使缓存无效)。 – 2012-07-06 00:52:07
还算不错,我想我可能不得不在某个时间点头。简要记录是什么意思?在这种情况下他们会持有什么? – clifgray 2012-07-06 04:57:33
那么每次添加帖子时,您都可以更新一个类别记录,该记录包含该类别的最近n个帖子。然后,您可以从缓存中获取前n个文章,如果没有缓存,则使用db.get(category_record键)而不是查询。这意味着您可以在写入而不是查询时进行所有类别的筛选。 – 2012-07-06 07:48:27