我正在谷歌應用程序引擎上使用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