从Google App Engine数据存储区(Python)删除对象并使用Memcache

时间:2013-12-12 20:03:47

标签: python google-app-engine memcached google-cloud-datastore

我正在尝试从GAE数据存储中删除一个对象,然后使用memcache缓存剩余的数据存储对象。该对象被成功删除,但由于某种原因,python日志和内存缓存没有识别出一个被删除。数据存储查看器显示对象已删除,但日志显示项目的长度没有变化...内存缓存只是缓存所有项目,就好像没有发生删除一样。非常感谢您给予的任何建议。

Python代码:

 yesterday = datetime.now()-timedelta(days=1)  # one day ago                
 sessions = db.GqlQuery("SELECT * FROM MentorAvailSessions WHERE created > :1", yesterday).fetch(1000)   #pulling list of all objects
 logging.info('************** len before deleting a session: %s*********' % len(sessions)) # shows a length of 3    

 for session in sessions:
     if (session.session_id == end_session_id) and (session.user == user_info.username):
         session.delete();

 remaining_sessions = db.GqlQuery("SELECT * FROM MentorAvailSessions WHERE created > :1", yesterday).fetch(1000)  #pulling list of just the remaining objects after deleting one
 logging.info('** len of remaining sessions: %s' % len(remaining_sessions))  # still shows a length of 3 after session.delete                       

 memcache.set('mentor_avail_sessions_cache', remaining_sessions, time=50000)      # is caching all three items instead of just the remaining 2

1 个答案:

答案 0 :(得分:1)

这是由于最终的一致性。没有祖先的查询不能保证非常一致(开发服务器会夸大这种效果以使您意识到它,在生产环境中您很少看到不一致)。

您应该确保您的查询使用祖先,以便它提供给实体组。或者,您可以显式减少memcache计数器,而不是从查询中刷新它。