我们应该在python shelve中存储会话权限还是会话变量?

时间:2017-01-25 07:23:23

标签: python session flask shelve

使用多个模块编写基于Web的flask api应用程序。我想为不同的模块的不同用户登录包含不同的权限和特权。查询是否应将这些权限存储为会话词典或搁置值?哪个更有效,更快?在这种情况下,为什么会有一个优先于另一个?

2 个答案:

答案 0 :(得分:5)

我建议你看一下像Memcached或Redis这样的NoSQL存储引擎。

它们为您提供了几个优势:

  1. 放置在另一台机器上,因此如果您需要扩展应用程序,您就可以执行此操作。

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

  3. 如果你真的需要一次就能冲洗。

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

答案 1 :(得分:2)

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

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

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

我同意@Eugene使用外部缓存服务可能是另一种可接受的解决方案(在这种情况下考虑使用一些烧瓶模块,如Flask-Redis)。这可能需要一些代码调整,因为这样的存储通常不能存储任何python对象,有时您可能需要手动转储或pickle对象。但是你可以缓存任何数量的数据而不影响python进程本身,可能会使用一些简洁的东西,比如数据TTL(在给定时间内自动删除缓存数据)和其答案中列出的其他proc @Eugene