0

我有一个奇怪的问题。在一项任务中,我从数据存储中获取数据并将其异步写入内存缓存:

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 个事件确实存在于内存缓存中。如果我只对尚未在内存缓存中的事件进行 2-3 次重试,那么一段时间后我将 100% 保存在内存缓存中。

但我真的不明白,为什么它在第一次尝试时不起作用?

4

1 回答 1

0

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

对我来说,这不是一个“问题”,如果我将某些东西放入内存缓存中,那么当我稍后要求它时它就不存在了。我将使用我投入的后备机制来应对这种情况。当您要求时,您根本无法假设内存缓存中会有任何内容。

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

权衡是保存在 memcache 中的数据是暂时的,并且在系统用完 memcache 空间时被驱逐。在极少数情况下,可以一次驱逐所有 memcached 数据。

于 2013-02-08T12:54:03.807 回答