我们应该将会话权限存储在 python 搁置中还是作为会话变量?

Should we store session privileges in python shelve or as session variables?

编写一个基于 Web 的 Flask api 具有多个模块的应用程序。我想为不同模块的不同用户登录合并不同的权限和特权。问题是这些权限是否应该存储为会话字典或搁置值?哪个效率更高、速度更快?为什么在这种情况下会偏爱其中一个?

我建议看一下 NoSQL 存储引擎,例如 Memcached 或 Redis。

他们给你几个好处:

  1. 放置在单独的机器上,因此如果您需要扩展您的应用程序,您将能够做到。

  2. 用于检查其中存储内容的额外界面。

  3. 如果你真的需要一次,可以冲水。

  4. 您可以将其他应用程序连接到这些程序,这样您就可以在多个应用程序之间共享会话(但不建议用于快速开发的大型应用程序并保持复杂的结构)。

将数据存储在 flask-related 对象中,例如 g object 通常将数据与您的 Flask 应用程序上下文相关联。从这个上下文中访问存储在 g 对象中的数据并不容易,有时如果您不熟悉 flask 上下文的概念,您可能会在使用相关功能时遇到困难。

我没有使用搁置模块,但这是简单的存储,存储在那里的数据应该可以从您的应用程序的任何位置获得。

我想这两个选项在性能或内存消耗方面不会有太大差异,因为所有这些数据都将由同一个 python 进程管理。当然,由于内部实施性能可能会有所不同,但我相信不会有太大差异。

我同意@Eugene that using external caching service may be another acceptable solution (consider in this case using of some flask modules like Flask-Redis). This may require some code tweaking because such storages usually cannot store any python object and sometimes you may need dump or pickle objects manually. But you may cache any amount of data not impacting python process itself, may use some neat things like data TTL (auto-remove cached data in given time) and other procs @Eugene他的回答。