2009-03-03 19 views
7

私のdjangoプロジェクトでいくつかのビューをキャッシュした後に - @ cache_page(60 * 5) - 私はmemcachedキャッシュが要求引数であっても全体のキャッシュに気づいた!したがって、ページを訪問する最初のユーザーがuserxyzとしてログインしている場合、同じページを要求する他のすべての匿名または登録ユーザーには、userxyzというユーザーによってキャッシュされたページが表示されます。明らかに、これは望ましい動作ではありません...私はビューのすべてをキャッシュすることができますが、要求の引数はキャッシュできませんか?またはmemcachedは匿名セッションにのみ適していますか?事前にmemcachedキャッシュ要求?

おかげで、 マルコスGogoulos

答えて

6

あなたはあなたのケースでは、1ページの動的および静的データを混合している場合、動的データは、ユーザのユーザ名でログインしているが、そのページのキャッシュは正しい選択ではありません。これは、memcachedの代わりにファイルベースのキャッシュ記憶域を使用していた場合は変更されません。

フラグメントキャッシュを試すことをおすすめします。

{% load cache %} 
{% cache 500 sidebar %} 
    .. sidebar .. 
{% endcache %} 

これで、識別子サイドバーを使用して500秒間キャッシュタグの内容がキャッシュされます。

現在のキャッシングの詳細情報を見つけることができます:

http://docs.djangoproject.com/en/dev/topics/cache/


を、これは例えば、非常に多くの場合、ウェルカムページをヒットしようとしているページであれば、あなたが利益を得るであろうと感じていること(たとえば、唯一の動的データはユーザー名です)、フラグメント・キャッシュを介したページ・キャッシュの使用から、いくつかのオプションがあります。

たとえば、ログインしているかどうかによって異なるリンクを表示する上部のログイン/ログアウトセクションを除いて、完全に静的なページを作成したい場合は、認証Cookieが存在するかどうかを確認できますページが最初にロードされ、javascriptを使用して条件付きで別のデータが表示されます。

2

Memcachedは単なるバックエンドです。それはあなたがそれをキャッシュするようにキャッシュします。だからあなたの質問はです "Djangoのフルページキャッシングは動的なページに適していますか?" おそらく、キャッシュのフルページは必要ありません。その一部だけです。または(CACHE_MIDDLEWARE_ANONYMOUS_ONLYを使用して)匿名の要求

のための唯一のページはあなたがtemplate fragmentsおよびユーザー固有のものではありませんコンテンツのこれらのビットをキャッシュに見たいと思うかもしれませんブック http://www.djangobook.com/en/1.0/chapter13/

0

を参照してください。

関連する問題