我正在尝试从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
答案 0 :(得分:1)
这是由于最终的一致性。没有祖先的查询不能保证非常一致(开发服务器会夸大这种效果以使您意识到它,在生产环境中您很少看到不一致)。
您应该确保您的查询使用祖先,以便它提供给实体组。或者,您可以显式减少memcache计数器,而不是从查询中刷新它。