APIを介して情報を取得・表示するWEBプログラムにおいて、レスポンス内容がキャッシュされてしまいDBの最新状態を取得できない問題が起きています。

MySQLを直接覗くとテーブルにレコードが追加されているのに、ブラウザからリロードしてみても取得される情報が前回と同じになってしまいます。

WEBプログラムの構成は以下のようになっています。
■フロント
FW: AngularJS

■API
言語: Python
FW: Flask
WAS: uWSGI
HttpServer: nginx(nginx→uWSGIへリバースプロキシ)
RDB: MySQL


おそらく、nginxかuWSGIのどちらかがキャッシュする設定になっており最新の状態を返却しないのではないかと考えていますが、自身で明示的にconfigファイルや起動オプションにキャッシュの設定はしていないため、どこが原因かはっきりとしません。

このような症状の場合に、どこが原因と考えられますでしょうか。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2014/11/22 22:39:39
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:dilutionist No.2

回答回数154ベストアンサー獲得回数51

ポイント200pt

話としてはこのあたりに近い気がしたのですが、SQLAlchemyは使用していますか?

python - How to disable SQLAlchemy caching? - Stack Overflow

id:hogesuke_1

SQLAlchemyは使用していないのですが、mysql.connectorで同じような事象が発生していたようです。
fetchしたあとにcommitするようにコードを修正したところ問題が解決しました。

ありがとうございました。

2014/11/22 22:39:06

その他の回答1件)

id:tea_cup No.1

回答回数1071ベストアンサー獲得回数194

ポイント100pt

 自分だったら、スーパーリロードしてみて、変化するかを確認します。
 後は、フロント側から順に、httpのHeadリクエストの応答が、DB内容更新に追従しているかを確認してゆきます。
 フレームワークを使ったことありませんので、細かいところは、他の方に譲りますが、『便利で超強力なWSGIサーバー uWSGI を使ってみよう - 檜山正幸のキマイラ飼育記』とか読むと、階層構造をブラウザで追うのもそれほど難しくなく見えます。
 何かのヒントになれば幸いです。

id:hogesuke_1

回答ありがとうございます。
スーパーリロードでも取得されるものは変わりませんでした。

2014/11/22 10:30:13
id:hogesuke_1

MySQLのクエリキャッシュは無効であることを確認しました。

Variable_name Value
query_cache_limit 1048576
query_cache_min_res_unit 4096
query_cache_size 1048576
query_cache_type OFF
query_cache_wlock_invalidate OFF
id:dilutionist No.2

回答回数154ベストアンサー獲得回数51ここでベストアンサー

ポイント200pt

話としてはこのあたりに近い気がしたのですが、SQLAlchemyは使用していますか?

python - How to disable SQLAlchemy caching? - Stack Overflow

id:hogesuke_1

SQLAlchemyは使用していないのですが、mysql.connectorで同じような事象が発生していたようです。
fetchしたあとにcommitするようにコードを修正したところ問題が解決しました。

ありがとうございました。

2014/11/22 22:39:06

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません