使用多个模块编写基于Web的flask api应用程序。我想为不同的模块的不同用户登录包含不同的权限和特权。查询是否应将这些权限存储为会话词典或搁置值?哪个更有效,更快?在这种情况下,为什么会有一个优先于另一个?
答案 0 :(得分:5)
我建议你看一下像Memcached或Redis这样的NoSQL存储引擎。
它们为您提供了几个优势:
放置在另一台机器上,因此如果您需要扩展应用程序,您就可以执行此操作。
额外的界面,用于检查存储在其中的内容。
如果你真的需要一次就能冲洗。
您可以将其他应用程序连接到这些程序,这样您就可以在多个应用程序之间共享会话(但不建议用于快速开发的大型应用程序并保留复杂的结构)。
答案 1 :(得分:2)
将数据存储在与烧瓶相关的对象(例如g object)中通常会将数据与烧瓶应用程序上下文相关联。从这个上下文中访问存储在 g 对象中的数据并不容易,有时如果您不熟悉flask的上下文概念,则可能难以使用相关功能。
我没有使用搁置模块,但这是简单的存储,存储在那里的数据应该可以从应用程序的任何位置获得。
我猜这两个选项在性能或内存消耗方面没有太大差异,因为所有这些数据都将由同一个python进程管理。当然,由于内部实施,性能可能会有所不同,但我并不相信。
我同意@Eugene使用外部缓存服务可能是另一种可接受的解决方案(在这种情况下考虑使用一些烧瓶模块,如Flask-Redis)。这可能需要一些代码调整,因为这样的存储通常不能存储任何python对象,有时您可能需要手动转储或pickle对象。但是你可以缓存任何数量的数据而不影响python进程本身,可能会使用一些简洁的东西,比如数据TTL(在给定时间内自动删除缓存数据)和其答案中列出的其他proc @Eugene。