写入Memcache还有1MB以外的限制吗?

时间:2013-02-08 12:46:57

标签: python google-app-engine

我有一个奇怪的问题。在任务中,我从数据存储区获取数据并将其异步写入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次重试,我会在一段时间内获得100%的memcache。

但我真的没有,为什么第一次尝试不起作用?

1 个答案:

答案 0 :(得分:0)

这可能是因为memcache“监视”了你的数据。经常使用的物品不太可能被驱逐。它(据我所知)不仅仅是一个FIFO类型系统

对我而言,这不是一个“问题”,如果我把内容放入内存缓存,那么当我后来要求它时它就不存在了。我将使用我所采用的后备机制来应对这种情况。当你提出要求时,你根本无法假设任何将在memcache中。

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

  

权衡是memcache中保存的数据是暂时的,并且在系统耗尽memcache空间时被逐出。在极少数情况下,可以立即驱逐所有memcached数据。