Python 如何在django中创建进程范围的可编辑变量(存储)?
我想为项目/应用程序设置创建项目范围的可访问存储 我想要实现的目标:-每个应用都有自己的应用特定设置存储在db中-当您生成django wsgi进程时,每个设置都存储在内存存储中,并且在整个项目范围内都可用-每当您更改db中的任何设置值时,都会调用从db重新生成存储 所以它非常接近缓存,但我不能使用缓存机制,因为它正在序列化数据。我也可以使用memcache来实现这个目的,但我想开发一个通用的解决方案(并不总是可以访问memcache)Python 如何在django中创建进程范围的可编辑变量(存储)?,python,django,data-storage,Python,Django,Data Storage,我想为项目/应用程序设置创建项目范围的可访问存储 我想要实现的目标:-每个应用都有自己的应用特定设置存储在db中-当您生成django wsgi进程时,每个设置都存储在内存存储中,并且在整个项目范围内都可用-每当您更改db中的任何设置值时,都会调用从db重新生成存储 所以它非常接近缓存,但我不能使用缓存机制,因为它正在序列化数据。我也可以使用memcache来实现这个目的,但我想开发一个通用的解决方案(并不总是可以访问memcache) 如果有人有任何想法来解决我的问题,我将非常感谢您的分享。在
如果有人有任何想法来解决我的问题,我将非常感谢您的分享。在向您提供任何具体建议之前,您需要了解这些系统的局限性 问题
- Django和PHP/其他流行语言之间的架构差异 每次访问页面时,PHP都会重新读取并重新计算整个代码树。这允许PHP在每次请求时从DB/cache/任何地方重新读取设置
- 初始化 许多django应用程序初始化自己的设置和参数内部缓存,并在模块导入时(服务器启动)对这些参数执行验证,而不是对每个请求执行验证。这意味着您在修改未启用db设置的应用程序的任何设置时都需要重新启动服务器,所以为什么不直接更改settings.py并重新启动服务器呢
- 多站点/多实例和内存中设置 Django文档严格禁止内存中的更改,因为它们只会影响单个服务器实例。在多个站点(contrib.sites)的情况下,只有一个站点将接收到对共享设置的更新。对于实例服务器(ep.io/gondor),任何更改都将只对本地实例进行,而不是对站点上运行的每个实例进行更改。小心踩
- 内存中的更改 由于上述原因,django docs严格禁止在服务器运行时更改设置值。但是,此选项不会影响性能。仅在您和单个服务器/实例制作的特定应用程序范围内使用
- 缓存(redis缓存/memcached) 这是中速选项。合理快速地查找可以轻松反序列化为复杂python结构的设置-非常适合dict配置。重要的是,在站点/实例之间安全地共享值,并进行原子更新
- DB(斯洛) 从数据库一次获取一个设置将非常缓慢,除非您侵入连接池。一次获取所有设置的速度更快,但每一个请求都会增加db传输。安全地在站点/实例之间同步设置。仅用于1或2个设置,使用是合理的
可以将配置值存储在database/cache/mem中,但您必须注意注意注意事项和潜在的性能影响。为settings.py创建一个通用的替代品将不起作用,但是创建一个存储其他应用程序设置的支持应用程序可能是一个可行的解决方案,只要其他应用程序接受每个请求都必须重新加载设置。您给了我高质量的回答,但我需要的是技术支持,而不是理论。TL;DR:没有通用的解决方案。如果有,我们都会使用它。您必须根据您的用例选择自己的方法。如果你选择一种方法,我可以帮你走出困境,但我不是来照顾你的。