【发布时间】:2017-02-01 15:48:23
【问题描述】:
编写带有多个模块的基于 Web 的烧瓶 API 应用程序。我想为不同模块的不同用户登录合并不同的权限和特权。询问这些权限是否应该存储为会话字典或搁置值?哪个更高效、更快?在这种情况下,为什么会有一种偏好?
【问题讨论】:
标签: python session flask shelve
编写带有多个模块的基于 Web 的烧瓶 API 应用程序。我想为不同模块的不同用户登录合并不同的权限和特权。询问这些权限是否应该存储为会话字典或搁置值?哪个更高效、更快?在这种情况下,为什么会有一种偏好?
【问题讨论】:
标签: python session flask shelve
我建议看看 Memcached 或 Redis 等 NoSQL 存储引擎。
它们为您提供了几个优势:
放置在单独的机器上,因此如果您需要扩展您的应用程序,您将能够做到。
用于检查其中存储内容的额外界面。
如果你真的需要一次就可以冲洗。
您可以将其他应用程序连接到这些程序,这样您就可以在多个应用程序之间共享会话(但不建议用于大型快速开发应用程序和保持复杂结构)。
【讨论】:
将数据存储在与烧瓶相关的对象中,例如g object,通常会将数据与您的烧瓶应用程序上下文相关联。从这个上下文中访问存储在 g 对象中的数据并不容易,有时如果您不熟悉烧瓶上下文的概念,您可能会在使用相关功能时遇到困难。
我没有使用 shelve 模块,但这是一个简单的存储,存储在那里的数据应该可以从您的应用程序的任何位置获得。
我想这两个选项在性能或内存消耗方面不会有太大差异,因为所有这些数据都将由同一个 python 进程管理。当然,由于内部实现的性能可能会有所不同,但我相信不会有太大差异。
我同意@Eugene 的观点,即使用外部缓存服务可能是另一种可接受的解决方案(在这种情况下考虑使用一些烧瓶模块,如Flask-Redis)。这可能需要一些代码调整,因为这样的存储通常不能存储任何 python 对象,有时您可能需要手动转储或 pickle 对象。但是您可以缓存不影响 python 进程本身的任何数量的数据,可以使用一些简洁的东西,例如数据 TTL(在给定时间内自动删除缓存的数据)和他的答案中列出的其他 procs @Eugene。
【讨论】: