我有个奇怪的问题。在一个任务中,我从数据存储中获取数据,并将其异步写入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中。
但我真的不明白,为什么它在第一次尝试时不起作用?
发布于 2013-02-08 20:54:04
这可能是因为memcache“监视”您的数据。经常使用的项目不太可能被逐出。它(据我所知)不是简单的FIFO类型的系统
对我来说,这并不是一个“问题”,因为如果我把一些东西放到memcache中,当我稍后请求它时,它并不在那里。我将使用我加入的后备机制来处理这种情况。您不能简单地假设当您请求任何东西时,它都会在memcache中。
https://developers.google.com/appengine/articles/scaling/memcache
权衡之处在于,保存在memcache中的数据是暂时的,并且会在系统耗尽memcache空间时被逐出。在极少数情况下,可以一次清除所有memcached数据。
https://stackoverflow.com/questions/14772923
复制相似问题