2016-09-01 10 views
2

キャッシュデータに関連してデータベースに変更が加えられた場合、djangoにキャッシュをリフレッシュするよう通知する方法はありますか?私はこれを見つけたpost、最新の答えはありません、言及されたdjangoバージョンは1.6でした。私はキャッシュdocumentationを見て、質問に直接関係するものは見つけられませんでした。データが変更されたときにDjangoキャッシュ(Re​​dis)自動更新

私の質問はどのような私は、データベースクエリの結果をキャッシュし、キャッシュ

from django.core.cache import cache 

results = MyModel.objects.all() # 4 count 
cache.set('results', results) # Cached for 5 mins 

# Mean while records have been added to MyModel table 

results = MyModel.objects.all() # 6 count 
cache.get('results') # 4 count and would not be updated for 5 mins 

のタイムアウトの間に追加された新しいレコードがへの追加があったかどうかを確認するにはどのような方法がありますがある場合データベースからのレコードの追加または削除が行われたときはいつでも、データベースとキャッシュの更新が行われますか?

私は、これが重要であるかもしれない10のテーブルを近く持っています。レコードが変更されるたびに、キャッシュを更新する必要があります。

ご意見やご提案は大変ありがとうございます。

プロジェクトスタック:

Django: 1.9 
Python: 3.5 
Redis: 2.8 (Cache Database) 
Postgres: 9.5 (Main Database) 
+0

私は同様の問題が、わずかに異なる場合に実行しています。私のキャッシュでは、他のアプリケーションにいくつかのAPIの結果をキャッシュしています。したがって、更新API呼び出しでキャッシュをクリアするのではなく、API呼び出しを再度実行してバックグラウンドでキャッシュをリフレッシュし、getで再度ロードする方法があるかどうかを知りたがっています。 –

答えて

0

ので年後、これは私が

思い付いてきた私たちはあなたのアプリごとapp.pyでモデルにカスタムpost_saveレジスタを登録することができていますプロジェクトの初期化中にキャッシュを更新するか、すべてのモデルのpost_saveリスナーを追加します。

この2つの投稿は、レシーキーのキャッシュをクリアするレシーバ機能を提供するのに役立ちました。

私のアプリケーションでは、 "{} - {} - {}"。形式(slug、model_name、username)を私のredisキーのキーとして使用しました。このキーは、そのユーザーのモデルデータがかわった。ここで

は2つのポスト私が役に立ったされています BlogDjango Documentation

関連する問題