5

私はこれを持っていました。

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

Flask-Principal を導入するまでは問題なく動作していました。

@identity_loaded.connect_via(app)
def on_identity_loaded(sender, identity):

    # Set the identity user object
    identity.user = current_user
    # return
    if hasattr(current_user, 'id'):
        identity.provides.add(UserNeed(current_user.id))

    # Assuming the User model has a list of roles, update the
    # identity with the roles that the user provides
    if hasattr(current_user, 'roles'):
        for role in current_user.roles:
            identity.provides.add(RoleNeed(role.name))

これを追加すると、重大なパフォーマンスの問題が発生しました。SQLALCHEMY_ECHO は、静的ファイルがロードされるたびに User テーブルがクエリされることを示していました。

#Warning: Dummy Cache
users = {}
@login_manager.user_loader
def load_user(uid=None):
    if uid not in users:
        users[uid] = User.query.get(uid)
    return users[uid]

反復クエリの問題を解決したこの実験の後、Flask アプリにキャッシュを導入する必要があることに気付きました。ここに質問があります。

  1. キャッシュするにはどうすればよいUser.query.get(id)ですか?
  2. このユーザーキャッシュをいつクリアする必要がありますか?
4

1 に答える 1