2009-04-06 21 views
9

memcachedをバックエンドとしてサイト全体のキャッシュを使用しています。基本データベースオブジェクトが変更されたときに、キャッシュ内のページを無効にしたいと思います。ページ名を変更した場合Djangoのキャッシュから特定のアイテムを削除しますか?

それはすべてのページのナビゲーションに影響を与えるので、私は(全体のキャッシュを無効にするでしょう。私のニーズに不器用が、十分な。

だけでページのコンテンツを変更した場合、私は無効にしたいのですがちょうどそのページのキャッシュ。

これを行う簡単な方法はありますか?

答えて

4

キャッシュキーは絶対パスではないので、tghwのソリューションは実際には機能しません。キーは、絶対パスとHTTPヘッダーから計算されます。例については、this questionを参照してください。

5

私はジャンゴでのキャッシングの多くを行っていないが、私はあなたがここに欲しいsignalsを何であるかと思います。

あなたに012を設定することができます信号を基になるオブジェクト上に置き、コールバック関数でキャッシュ内のそのページを無効にします。

from django.core.signals import post_save 
from django.core.cache import cache 

def invalidate_cache(sender, **kwargs): 
    # invalidate cache 
    cache.delete(sender.get_absolute_url()) # or any other pertinent keys 

post_save.connect(invalidate_cache, sender=UnderlyingModel) 

これにより、アイテムがキャッシュから正しく削除されます。

+0

私はcache.deleteについて知らなかった sender.get_absolute_url()は私に正しいキャッシュキーを取得しますか?サイト全体のキャッシュがキーを生成する方法については、私はドキュメントを見ることができません。 –

+0

本当にうまくいきますか? – simplyharsh

+1

"デフォルトでは、Djangoのキャッシュシステムは要求されたパス(例えば"/stories/2005/jun/23/bank_robbed/")を使用してキャッシュキーを作成します。 (http://docs.djangoproject.com/ja/dev/topics/cache/) – michuk

関連する問題