【问题标题】:Efficient session variable server-side caching with Python+Flask使用 Python+Flask 实现高效的会话变量服务器端缓存
【发布时间】:2013-09-04 21:37:18
【问题描述】:

场景:

  • 主要的网络应用程序。 Python+Flask
  • Flask 登录和Flask.session 用于基本会话变量(用户 ID 和会话 ID)

Flask.session 和限制? (Cookie)

  • 基于 Cookie 并且基本上只在客户端持续存在。

  • 对于将定期读取的某些会话变量(即,用户权限、自定义应用程序配置),感觉 尴尬 在 cookie 中携带所有这些信息在每个页面请求时响应

数据库太多了?

  • 由于可以通过在登录时引入唯一的会话 id 在服务器端识别会话,因此可以使用一些服务器端会话变量管理。在服务器端从数据库中读取这些数据也感觉像是不必要的开销。

问题

  • 在服务器端处理会话变量的最有效方法是什么?

也许这可能是一个基于内存的解决方案,但我担心不同的 Flask 应用程序请求可能会在不会共享内存存储的会话数据的不同线程上执行,或者在同时读写的情况下会导致冲突。

  • 我正在寻找有关规划基本级别架构的建议和最佳实践。

【问题讨论】:

  • 不确定您的确切情况,但有一个名为 Flask-KVSession 的插件,它是烧瓶内置基于 cookie 的会话的插入式服务器端替代品,听起来它可能适合您需要。
  • Flask-Caching 是你所需要的,look bellow

标签: python flask web session caching


【解决方案1】:

你的直觉是正确的,这可能不是这样做的方式。

会话数据应该只是临时信息,不会太麻烦而无法丢失和重新创建。例如,用户只需再次登录即可恢复它。

服务器上必需的配置数据或任何其他必须在注销后仍然存在的数据不是会话的一部分,应存储在数据库中。

现在,如果您真的需要轻松地将这些信息保存在客户端,并且如果丢失也不是什么大问题,那么请使用会话 cookie 来记录登录/退出状态和永久用于其余配置信息的具有较长生命周期的 cookie。

如果信息的大小太大,那么我能想到的唯一选择是将登录/注销状态以外的数据存储在数据库中。

【讨论】:

    【解决方案2】:

    Flask-Caching

    您需要的是一个服务器端缓存包,它是Flask-Caching

    一个简单的设置:

    from flask import Flask
    from flask_caching import Cache
    
    app = Flask(__name__)
    app.config['CACHE_TYPE'] = 'SimpleCache' 
    cache = Cache(app)
    

    然后是explicitly use of a cached variable

    @app.route('/')
    def load():
        cache.set("foo", foo)
        bar = cache.get("foo")
    

    Flask-Caching 中还有更多内容,那就是 recommended approach by Flask. 如果是带有 gunicorn from here 的多线程服务器,您最好使用 ['CACHE_TYPE'] = 'FileSystemCache'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-05
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      相关资源
      最近更新 更多