2010-11-13 47 views
2

所以:我總是部署我的Django應用程序,同時運行memcached。爲了我的目的,他們總是在同一個實例上運行。我能夠與這些線緩存settings.py需要django中的中級/高級緩存幫助,以及memcached和朋友

CACHE_BACKEND = 'memcached://127.0.0.1:11211/' 
CACHE_MIDDLEWARE_SECONDS = 60 
CACHE_MIDDLEWARE_KEY_PREFIX = "the_name_of_the_app" 
SESSION_ENGINE = "django.contrib.sessions.backends.cached_db" 

...我可以清楚地看到性能優勢,當內存緩存運行。但根據the django docs on the subject,這是最簡單的緩存策略 - 我應該從哪裏去獲得更多性能?是否必須手動使用memcache訪問器對一個模型或查詢集進行花花公子,或者是否有策略上更好的方法?

我喜歡memorized,並且有一些運氣 - 但在django緩存仍然是一個黑盒子給我。請告訴我前進的方向,如果這是你熟悉的道路。

+0

如果您想了解爲什麼增加緩存性能是一個目標,這將會很有幫助。例如。你遇到什麼樣的性能問題,你尋求什麼樣的改進,多少工程努力是你的改進。 – 2010-12-09 18:38:00

回答

2

Memcache不會神奇地讓你的網站更快。首先你需要做的絕對的事情是弄清楚什麼是昂貴的。一個簡單的方法做,這是來裝飾你的意見或其他功能,看看他們一般需要多長時間來執行,例如:

def print_latency(f): 
    def wrapped(*args, **kwargs): 
     try: 
      start = time.time() 
      r = f(*args, **kwargs) 
     finally: 
      print >>sys.stderr, 'Latency (%s): %.3fs' % (f.__name__, time.time() - start) 
     return r 
    wrapped.__name__ = f.__name__ 
    return wrapped 

@print_latency 
def my_view(request): 
    ... 

接下來要做的是找出哪些資源緩存,即什麼數據不會改變,或者如果它沒有造成可怕的經歷?然後從頂部開始。你能緩存模板嗎?如果沒有,你能緩存視圖嗎?如果不是,你可以緩存數據庫調用嗎?後者可能是你最終會去的地方,除非你有一個超級簡單的網站。

然後,你需要看看你的db調用是否非常緩存。您可能需要將複雜的查詢分解爲更簡單的查詢。

緩存並不神奇,並不完美。你可能有更糟糕延遲與緩存但更好吞吐量。或者平均延遲可能會更好,但最糟糕的延遲可能會很糟糕。