私はこれを持っていました。
@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 アプリにキャッシュを導入する必要があることに気付きました。ここに質問があります。
- キャッシュするにはどうすればよい
User.query.get(id)ですか? - このユーザーキャッシュをいつクリアする必要がありますか?