FlaskLogin使数据库查询每个页面加载

时间:2014-02-16 22:30:04

标签: database login flask

我有常规的旧代码(没有惊喜)。

@login_manager.user_loader
def load_user(user_id):
    print 'loading user'
    return connection.db.Users.find_one( { '_id' : ObjectId(user_id) } )

对此的评估表明,每次页面更改时,它都会加载用户 - 从而查询数据库。我该怎么做才能减轻数据库的负担?

编辑。代码有效。除了我想减少数据库负载之外,没有什么不对。

1 个答案:

答案 0 :(得分:0)

每次请求从数据库加载用户都非常标准。

原因是Web服务器是无状态的,一旦它们处理完全忘记它的请求。当新请求到来时,请求提供的信息(例如cookie)用于“记住”客户端并将其恢复。

如果要减少数据库负载,则可以实现缓存层。在其最简单的形式中,此缓存将在内存中保留最后N个访问的用户。您的load_user()函数不会直接将查询发送到数据库,它会将它们发送到缓存。 cahe将检查所请求用户的副本是否在内存中,并且只有在它不是从数据库中抓取它时才会检查。从数据库加载的每个新用户都会添加到缓存中,如果达到N限制,则删除最旧的用户,这样就不会占用太多内存。