使用Python+Flask实现高效的会话变量服务器端缓存

2024-02-06

设想:

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

Flask.session和限制? (饼干)

  • 基于 Cookie,基本上仅保留在客户端。

  • 对于一些会定期读取的会话变量(即用户权限、自定义应用程序配置),感觉awkward to 将所有信息保存在 cookie 中, 在每个页面请求时 and response.

数据库太多?

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

Question

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

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

  • 我正在寻找规划基础架构的建议和最佳实践。

Flask 缓存 https://flask-caching.readthedocs.io/en/latest/

您需要的是一个服务器端缓存包Flask 缓存 https://flask-caching.readthedocs.io/en/latest/.

一个简单的设置:

from flask import Flask
from flask_caching import Cache

app = Flask(__name__)
app.config['CACHE_TYPE'] = 'SimpleCache' 
cache = Cache(app)

Then a 显式使用缓存变量 https://flask-caching.readthedocs.io/en/latest/#explicitly-caching-data:

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

Flask-Caching 还有更多内容,这就是Flask 推荐的方法。 https://flask.palletsprojects.com/en/2.0.x/patterns/caching/如果是带有gunicorn的多线程服务器从这里 https://stackoverflow.com/a/69903128/1207193你最好使用['CACHE_TYPE'] = 'FileSystemCache'

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Python+Flask实现高效的会话变量服务器端缓存 的相关文章

随机推荐

  • bash: /bin/tar: 使用 tar 压缩多个文件时参数列表太长

    我正在尝试使用以下命令压缩存档中的文件 tar czvf compress file tar gz cat file list txt 我有一个错误 bash bin tar Argument list too long 文件编号太长 如何
  • 在Android中生成并打印特定尺寸的PDF

    我正在使用 Android 应用程序 我想生成并打印 PDF 但我遇到了一些麻烦 我需要生成PDF与 80 毫米width 以及height可能会有所不同 我正在尝试这个 public class PDFGenerator implemen
  • 为位于系统托盘中的 Java 程序创建键盘挂钩

    基本上我有一个在系统托盘中运行的java程序 并且想添加它 因此如果用户按下CTRL SHIFT 1 它会选择位于托盘中的java程序的右键单击选项之一 我想我正在寻找的是有关执行此操作的教程 或者最简单的方法是什么 我以前从未做过这样的事
  • 删除不在远程的分支

    gt git branch a master test remotes origin master remotes origin test 当有人删除remotes origin test 我的电脑上仍然可以看到它 我知道我可以做到这一点并
  • Java 正则表达式 (java.util.regex)。搜索美元符号

    我有一个搜索字符串 当它包含美元符号时 我想捕获此后的所有字符 但不包括点或后续的美元符号 后者将构成后续匹配 因此 对于这些搜索字符串中的任何一个 bla V N XYZ bla bla V N XYZ 我想返回 V N XYZ 如果搜索
  • 让 CMake include_directories SYSTEM dirs 前缀带有等于字符 (=)

    有没有办法让CMakeinclude directories使用 equals 包含系统目录前缀 特点 这样我就可以让 gcc 为关联的目录添加前缀 isysroot交叉编译的标志 当我尝试使用 equals 前缀 假定相对路径和当前源路径
  • 从 C# 应用程序打开 txt 文件

    以下代码假设从我的 C 应用程序打开 CMD 并打开文件 text txt 我尝试将文件路径设置为环境变量 但是当记事本打开时 它会查找 file txt 而不是 text txt 知道为什么吗 System Diagnostics Pro
  • 命名空间“React”没有导出成员“FC”。在“@types/reactour”中

    我正在一个反应 应用程序中工作 我有我的包 json文件如下 dependencies storybook addon backgrounds 3 4 8 storybook react 4 0 0 alpha 4 types d3 5 0
  • Jekyll自动重新加载

    第一次使用 Jekyll 看起来像是自动重新加载功能 运行jekyll auto server 仅由 Markdown 文件更新触发 这是正常行为吗 有什么方法可以更改其他类型的文件 例如 css 我使用的是 scss 或 html 文件
  • IIS 作为反向代理 - 压缩来自后端服务器的重写响应

    我正在实现一个反向代理 用于将请求路由到后端服务器 从功能上讲 一切正常 但我担心来自后端服务器的所有响应都会在未经压缩的情况下传输到客户端 Web 浏览器 设置如下 内部域上的后端服务器 不可公开访问 在以下位置托管 Web 应用程序ht
  • 使用 Javascript 在 Photoshop 中保存文件而不提示?

    我正在使用一个简单的脚本来编辑现有图像 无论我做什么 总会出现保存提示 我希望这是 100 自动化的 save 给我一个 saveAs 提示 将其保存为副本 close SaveOptions SAVECHANGES 只是给我一个通用的 您
  • NullInjectorError:没有 MatDialog 的提供者 - 尝试为 MatDialog 创建包装服务

    我是编码新手 也是 Angular 新手 所以我想我会寻求一些帮助 这是我的第一个问题 所以请耐心等待 我想为 Angular Material Dialog Service 创建一个包装服务 我只是想自学 这不是用于生产应用程序 所以我在
  • 你能改变颤动文本主题吗?

    如果主题在 main dart 中设置为 return MaterialApp title MY APP theme ThemeData primarySwatch Colors blue fontFamily Cabin textThem
  • 使用 SqlCommand 执行非查询,您可以获取通常发布到“消息”的文本吗?

    当使用 SqlCommand 执行非查询 例如数据库恢复 时 如果使用 Management Studio 是否可以以编程方式获取通常发布到 消息 选项卡的文本 如果是的话怎么办 是的 SqlCommand 对象上有一个名为 SqlInfo
  • AWS Lambda 性能问题

    我使用与 aws lambda java 集成的 aws api gateway 但我发现这种方法存在一些严重问题 删除服务器并让您的应用程序开箱即用的概念非常好 但这是我面临的问题 我的 lambda 正在做两件简单的事情 验证从客户端接
  • 日期 java.lang.IllegalArgumentException

    出现错误 java lang IllegalArgumentException 位于 java util Date parse 未知来源 位于 java util Date 未知来源 这是我的java代码 import java util
  • 如何强制为相同的输入打开第二个编辑器?

    我正在编写一个 Eclipse 插件 可以更轻松地编辑 Android 资源 当用户单击项目内的任何 XML 资源文件时 将打开一个编辑器 允许一次编辑项目中的所有资源 我想添加在单独的默认 Android 资源编辑器中打开同一文件的功能
  • 自动解决除部分文件外的git冲突

    我有以下 git 存储库 oooooooooooooo o o o V1 o V2 o o MyChange 我有一个git diff for V1 MyChange 现在我想合并所有内容V2并创建一个新的差异V2 MyChange 我如何
  • C# WPF - 拖动图像

    我试图获得一些简单的功能 从文件中获取图像 将其添加到画布中 然后允许用户左键单击 并按住 图像 然后将其拖动到画布上 即更新图像的地点 这是我到目前为止所拥有的 我应该添加什么 private void btnAddImage Click
  • 使用Python+Flask实现高效的会话变量服务器端缓存

    设想 主要网络应用程序与 Python Flask Flask 登录和Flask session对于基本会话变量 用户 ID 和会话 ID Flask session和限制 饼干 基于 Cookie 基本上仅保留在客户端 对于一些会定期读取