7

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

前もって感謝します、マルコス・ゴグーロス

4

3 に答える 3

6

1 つのページに動的データと静的データを混在させている場合、動的データがログインしているユーザーのユーザー名である場合、ページ キャッシュは適切な選択ではありません。memcached の代わりにファイル ベースのキャッシュ ストレージを使用している場合、これは変わりません。

フラグメントキャッシュを試すことをお勧めします。次のようなことができます。

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

これにより、キャッシュ タグのコンテンツが識別子サイドバーと共に 500 秒間キャッシュされます。

キャッシュの詳細については、次を参照してください。

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


これが非常に頻繁にヒットするページ (ウェルカム ページなど) で、フラグメント キャッシュよりもページ キャッシュを使用する方がメリットがあると思われる場合 (たとえば、唯一の動的データはユーザー名です)、いくつかあります。その他のオプション。

たとえば、ユーザーがログインしているかどうかに応じて異なるリンクを表示する上部のログイン/ログアウトセクションを除いて、完全に静的なページが必要であるとします。ページがログインしているときに認証 Cookie の存在を確認できます。最初に読み込まれ、javascript を使用して条件付きで異なるデータを表示します。

于 2009-03-03T13:30:57.160 に答える
2

Memcachedは単なるバックエンドです。キャッシュするように指示したものはすべてキャッシュします。だから本当にあなたの質問は「Djangoのフルページキャッシングは動的ページに適していますか?」です。 おそらく、フルページをキャッシュするのではなく、その一部だけをキャッシュする必要があります。または匿名リクエストのページのみ(を使用CACHE_MIDDLEWARE_ANONYMOUS_ONLY

書籍 http://www.djangobook.com/en/1.0/chapter13/を参照してください

于 2009-03-03T13:35:19.973 に答える
0

テンプレートのフラグメントを調べて、ユーザー固有ではないコンテンツのビットをキャッシュすることをお勧めします。

于 2009-03-09T16:48:10.990 に答える