缓存Flask-Login user_loader

时间:2017-09-27 07:38:20

标签: session caching flask flask-sqlalchemy flask-login

我们使用flask-login,并且从代码中看来,每个请求都会调用user_loader回调。我知道它是加载当前用户但是我可以规避每个请求命中用户表吗?

这是我的用户加载器的样子

@login_manager.user_loader
 def load_user(id=None):
  return User.query.get(id)

1 个答案:

答案 0 :(得分:1)

应该缓存User.query.get而不是load_user

这是一个示例代码:

def get_user(id): if not id: return None cache_key = 'user_%d' % id rt = cache.get(cache_key) if rt is not None: # cache hitten return rt else: # cache miss u = User.query.get(id) cache.set(cache_key, u) return u

一些注意事项:

  1. 此处cache对象代表redis客户端或memcached客户端,让您实现。
  2. 此外,用户实例可能不会直接存储在缓存后端中,因此 应该进行序列化和反序列化。
  3. 如有必要,您还应检查缓存结果的过期时间。
  4. 接下来但并非最不重要,当用户更改(例如编辑属性或状态更新)时,应调用缓存。
  5. 缓存模式(如果缓存命中,则返回,如果缓存未命中则获取和缓存)可以实现为缓存装饰器,因此可以重用于其他类型的缓存。
相关问题