0

奇妙な問題があります。タスクでは、データストアからデータをフェッチし、非同期で memcache に書き込みます。

ke = database.Events.query(database.Events.eventid.IN(eventslist))
eventskeys = ke.fetch(len(eventslist),keys_only = True)

data = ndb.get_multi(eventskeys)

eventsdic = {}

for event in data:
    eventsdic.update({event.eventid: event.participants})

client = memcache.Client()

rpc = memcache.create_rpc()     
response = client.set_multi_async(eventsdic, time=3600, rpc=rpc)

イベントリストには 20 個のアイテムがあります。私は、キュー内のさまざまなタスクにまたがる約 500 のアイテムに対してこれを行います。

エラーは発生しません。しかし、最初の試行では、500 件のイベントのうち約 300 件が実際に memcache に存在することに気付きました。まだ memcache にないイベントだけで 2 ~ 3 回再試行すると、しばらくすると memcache が 100% になります。

しかし、最初の試行でうまくいかないのはなぜですか?

4

1 に答える 1

0

おそらく、memcache がデータを「監視」しているためです。頻繁に使用されるアイテムは、削除される可能性が低くなります。それは(私が理解しているように)単なるFIFOタイプのシステムではありません

私にとって、何かを memcache に入れても、後で要求したときにそこにないというのは「問題」ではありません。その状況に対処するために、私が入れたフォールバック メカニズムを使用します。memcache を要求したときに、何かが memcache にあると想定することはできません。

https://developers.google.com/appengine/articles/scaling/memcache

トレードオフは、memcache に保持されるデータは一時的であり、システムが memcache スペースを使い果たすと削除されることです。まれに、すべての memcached データが一度に削除されることがあります。

于 2013-02-08T12:54:03.807 に答える