2

クエリの 1 つだけでコンテキスト キャッシュを無効にしたいと考えています。私は次のようにできると思いました:

MyModel.query(ancestor=user.key).fetch(100, options=ContextOptions(use_cache=False, use_memcache=False))

また

MyModel.query(ancestor=user.key).fetch(100, config=ContextOptions(use_cache=False, use_memcache=False))

しかし、それは私にはうまくいかないようです。だから私の質問は、 fetchを使用してクエリのキャッシュと memcache を無効にするにはどうすればよいですか?

PS:

get() の場合、完全に機能します。

MyModel.query(ancestor=user.key).get(use_cache=False, use_memcache=False)

ありがとう!

4

2 に答える 2

4

あなたはちょうど書くことができるはずです

MyModel.query(........).fetch(limit, use_cache=False)

それが望ましい効果をもたらさない場合は、別のバグを見ています。この目的のためにグローバル キャッシュ ポリシーを設定する必要はありません。

(過去のある時点で fetch() が use_cache=...; をサポートしていなかったのは事実ですが、それは長い間修正されています。また、use_memcache=...; を気にする必要はありません。クエリでは使用されません。一切処理しません。)

于 2012-10-05T16:51:00.240 に答える
2

キャッシングは get() でのみサポートされています。ドキュメントから:

クエリは、キャッシュ内の値を検索しません。ただし、キャッシュ ポリシーで指定されている場合、クエリ結果はインコンテキスト キャッシュに書き戻されます (ただし、Memcache には書き込まれません)。

キャッシュされているように見えるいくつかのエンティティで問題が発生している場合は、おそらくコンテキスト キャッシュ ポリシーを変更する必要があります。

ctx.set_cache_policy(lambda key: False)

set_cache_policy の引数は、1 つのパラメーター (キー) を受け取り、キーをキャッシュする必要がある場合はブール値を返す関数でなければなりません。ここでは常に False を返すため、エンティティはキャッシュされません。

于 2012-10-04T16:12:09.360 に答える