2017-10-12 11 views
1

私はredisキャッシュまたは他のキャッシュにキーがあり、そのキーに対するGETクエリがたくさんあるとします。キーの値は、モデル(テーブル)のデータに依存します。ここで、あるプロセスを通して、そのキーに関連付けられた値がデータベース内で更新されたら、キャッシュを無効にできる方法は何か。テーブル内の更新時に無効化キャッシュ

答えて

3

Django signalsを使用して、post_saveシグナルをリッスンして関連するキャッシュをパージする受信機能を作成できます。例:

from django.db.models.signals import post_save 

@receiver(post_save, sender=Item) 
def my_handler(sender, instance, created, **kwargs): 
    r.delete('item/%d' % instance.pk) 

より堅牢なソリューションは、django-cacheopsのようなパッケージを使用することです。

+0

こんにちは@jacob GETリクエストが呼び出されたときとほぼ同じ時刻にシグナルが生成されたら、どれが優先されるのでしょうか? –

+0

@UtkarshSrivastavあなたのDjango Webアプリケーションワーカーは異なるプロセスで動作しているので、お互いに「競合する」べきではありません。 Redisの 'delete'操作は事実上瞬間的でなければなりません。あなたが非常に珍しいユースケースに取り組んでいない限り、それは問題ではありません。 –

関連する問題