0

memcache と GAE DB の操作に問題があります。たとえば、DB操作の後にmemcache rigthを更新すると、x.put()、私のmemcache関数は古い値を返すことがよくあります。sleep() を使用すると、キャッシュはより頻繁に正しくなりますが、これは正しくありません。私の意見では

sleep(0.2) 
data = Picture.all().order('-created').fetch(300)
memcache.set('pictures_all', data)

正しい memcache を取得するには、何をする必要がありますか?

回答: クエリで親を使用する必要があります。すべての Picture エンティティは同じ親を持つ必要があります。そうすれば、一貫性のある強い結果が得られます。

data = Picture.all().order('-created').ancestor(main_key()).fetch(300)
memcache.set('pictures_all', data)
4

4 に答える 4

2

データがある場合は、memcache の 1 つのエントリを更新するだけで、memcache からすべてを取得する必要はありません。何かのようなもの

data.put()
memcache.set(key, data)
于 2013-04-06T04:25:40.727 に答える
0

問題が結果整合性にあるという正しい方向に進んでいます。

STRONG_CONSISTENCY を使用すると問題は解決しますが、将来的にはスケーラビリティの問題 (解決が困難な問題) が発生します。

これに対する解決策は、厄介なことに、必要以上に複雑です。また、結果整合性の動作を考えると、本当に防弾ソリューションがあるかどうかもわかりません。

疑似コードは次のようになります。

all_pictures = memcache.get('pictures_all')
if not all_pictures:
    all_pictures = convert_to_list(Picture.all().order('-created').fetch(300))
if not newdata in all_pictures:
    add_to_list_in_proper_order(all_pictures, newdata)
memcache.set('pictures_all', all_pictures)
于 2013-04-06T15:14:33.373 に答える
0
config = db.create_config(deadline=10, read_policy=db.STRONG_CONSISTENCY)
data = Picture.all().order('-created').fetch(300, config=config)
memcache.set('pictures_all', data)

なるほど、これで解決ですね。

編集:いいえ、これはうまくいきません

于 2013-04-06T05:06:28.570 に答える