2012-01-09 25 views
4

私はdjangoプロジェクトでビューキャッシュを使用しています。Djangoで特定のキャッシュをクリアする

キャッシュはURLをキーとして使用するので、ユーザーがオブジェクトを更新/削除すると、そのキーのキャッシュをクリアする方法が不思議です。

例:ユーザーがdomain.com/post/1234/にブログ投稿を投稿しました。ユーザーが編集した場合、そのURLのキャッシュバージョンを削除するには、ビューの最後に何らかの種類のdelete cacheコマンドを追加します編集した投稿を保存します。

私が使用している:

@cache_page(60 * 60) 
def post_page(....): 

をpost.idが1234である場合、これはうまくいくかもしれないようにそれはそう、それはありません。django cache docsから

def edit_post(....): 
    # stuff that saves the edits 
    cache.delete('/post/%s/' % post.id) 
    return Http..... 
+0

私の推測では、使用しているキーが間違っているということです。 memcachedサーバーで[this script](http://simple-and-basic.com/2008/10/list-memcached-keys.html)を使用してキーの一覧を表示することができます。適切なキーを取得したら、再度cache.delete(key)メソッドを試してください。 – stephenmuss

+0

更新されたdjangoキャッシュドキュメントへのリンクは以下の通りです: [Django Caches](https://docs.djangoproject.com/en/1.9/topics/cache/#django-s-cache-framework) – turtlefranklin

答えて

12

、それはcache.delete('key')がすべきことを言います足ります。だから、あなたが持つかもしれない、それは私の心に来る二つの問題:

  1. あなたの輸入が正しくない、あなたがdjango.core.cacheモジュールからcacheをインポートする必要があることを覚えて:

    from django.core.cache import cache 
    
    # ... 
    cache.delete('my_url') 
    
  2. あなたは」キーを再使用は正しくありません(おそらく、 "domain.com"を含む完全なURLを使用しています)。あなたがシェルに行くことができます正確なURLである確認するには:

    $ ./manage.py shell 
    >>> from django.core.cache import cache 
    >>> cache.has_key('/post/1234/') 
    # this will return True or False, whether the key was found or not 
    # if False, keep trying until you find the correct key ... 
    >>> cache.has_key('domain.com/post/1234/') # including domain.com ? 
    >>> cache.has_key('www.domain.com/post/1234/') # including www.domain.com ? 
    >>> cache.has_key('/post/1234') # without the trailing/? 
    
+2

これはそうです受け入れられた答え。正しい鍵は何ですか?私は同じ問題を抱えており、正しいキーを見つけることはできません。 – caliph

+0

@caliph私もこの問題を抱えていました。 djangoのcache_pageデコレータは、要求オブジェクトに基づいてキーを作成することが判明しました。これは、ドキュメントよりも説明するための良い方法です。たとえば、すべてのことが言われて実行されたときに、このように見えるキーになります。 ":1:views.decorators.cache.cache_page..GET.3e144467194c80669ac0d860e0368097.ec0b8f79f7413e4479a39eb2bb0104f0.en-us.America/New_York" 。 もっと簡潔な説明があります[ここ](http://stackoverflow.com/a/2268583/5597611) –

関連する問題