3

Apache でホストされているアプリケーションの 1 つを使用して、johnny キャッシュを構成しました。デフォルトポートの同じマシンで実行されるバックエンドとしてmemcachedで構成されています。

複数の Web クライアントが Apache を通過する場合、キャッシュは正常に機能します。それらはすべてキャッシュから読み取られ、更新によりキャッシュが無効になります。ただし、python プログラム/スクリプトが django (johnny 構成を持つ同じ settings.py) を使用して DB から読み取る場合、キャッシュから読み取られないため、そのプログラムによって行われた更新はキャッシュに影響しません。これにより、キャッシュから古いデータを読み取る Web クライアントが残ります。

これに関連するジョニーキャッシュのドキュメントには何も見つかりませんでした。この状況について何か考えはありますか?

johnny cache 0.3.3、django 1.2.5、python 2.7 を使用しています。

編集: コメントの質問の1つに答えるために、スクリプトのDBからこのように読み取りました-

>>> cmp = MyModelClass.objects.get(id=1)
>>> cmp.cust_field_2
u'aaaa'

update sqlステートメントを発行してテーブルを直接更新し、キャッシュから読み取っているため、更新された値がWebクライアントに反映されていないため、キャッシュから読み取られないことがわかっています。MyModelClass.objects.get(id=1) を使用してオブジェクトを再フェッチすると、スクリプトは更新された値を表示します。

ありがとう、

4

2 に答える 2

4

スクリプト/管理コマンドを実行するとミドルウェアが呼び出されないようです。そのため、違いがわかります。これは、カスタムスクリプトには存在しないリクエストやビューなどを処理するため、ミドルウェアのドキュメントを読むときに意味があります。

これを回避する方法を見つけましたが、JohnnyCacheビットバケットリポジトリに問題があります。スクリプトで、データベースで何かを行う前に、次のように記述します。

from johnny.middleware import QueryCacheMiddleware
qcm = QueryCacheMiddleware()

# put the code for you script here

qcm.unpatch()

あなたはここでそれについてもっと見ることができます:

https://bitbucket.org/jmoiron/johnny-cache/issue/49/offline-caching

そしてここ:

https://bitbucket.org/jmoiron/johnny-cache/issue/50/johhny-cache-not-active-in-management

于 2012-04-11T18:15:53.973 に答える
3

これは、ドキュメントから推奨される方法です。

from johnny.cache import enable
enable()

アップデート:

私が観察したことは、あなたの tasks.py ファイルが最初にこれを持っているかのように、settings.py を使用してジョニーキャッシュを無効にすることはできなくなりました。

問題を報告しました: https://github.com/jmoiron/johnny-cache/issues/27

于 2012-12-21T20:25:41.217 に答える