【问题标题】:What should be first: setting or cache object首先应该是:设置或缓存对象
【发布时间】:2014-06-04 16:15:29
【问题描述】:

我有一个非常基本的问题让我抓狂。我维护自己的小框架。我可以使用 YAML/JSON/XML/whatever 设置文件来配置框架。该框架还使用缓存(如果没有安装缓存服务器,则可以使用任何 memcached/couchbase/基于文件的缓存)。

所以不,我有以下问题:我想缓存从缓存中的设置文件解析的设置,但我想在设置文件中定义用于该设置的缓存类型。

对此有什么合适的解决方案?我无法想象我应该如何管理它,这让我想到我的框架中可能有一个非常基本的设计/架构错误。有什么解决办法吗?

【问题讨论】:

  • 作为一切,首先是核心配置,其他包含可以依赖于该文件,该文件可能会维护大部分已定义的常量和其他重要设置。
  • @DarylGill 感谢您的评论。但这对我的案子究竟意味着什么?所以我应该有 2 个单独的设置文件?一个核心设置文件永远不会在每次请求时被一遍又一遍地缓存和解析,而一个应用程序相关的设置文件会根据核心设置文件中定义的缓存进行缓存?
  • 先加载核心,然后缓存..这是我对这个案例的看法,其他人可能有不同的方法

标签: php architecture


【解决方案1】:

根据我在 Symfony1 和 Symfony2 中的经验,尽可能多地缓存。

在他们的生产环境中,所有内容都被缓存,因此您会遇到缓存类型在本身缓存的设置文件中描述的问题。

对此的正确解决方案是:在 Symfony 中:在更改设置后删除 prod 中的缓存。

对于开发人员,设置总是会重新读取,因为您不会在调试中进行分析,因此易于开发比引导时间更重要。

我建议像 symfony 那样拆分它。 对于 prod,您的设置很少更改,因此解析可以缓存的文件会浪费资源,并且速度通常是 prod 中的优先级 1。

编辑:关于引导顺序的选项:

  • 始终先读取设置,然后再决定需要哪个缓存。
  • 使用硬编码的设置配置缓存(例如基于文件)

我建议使用选项 2。您的框架与缓存无关,因为可以对其进行配置,这很好,但对于框架的基本设置,您根本不需要它。您不想为了基本设置而设置不同的缓存机制,如 memcache、sql 等。

Symfony 以最有效的方式解决了这个问题,因为它为设置提供了默认的缓存生成,而这只是一个 php 文件。就这样。当 symfony 加载设置时,它会查找要包含的某个文件,如果它不存在,symfony 通过创建纯 php 来缓存它,然后读取它。

【讨论】:

  • 感谢您的回答。那么问题还是一样的。当我缓存设置时。如果在设置文件中指定了缓存配置,我如何知道我必须初始化哪个缓存来加载缓存的设置?所以我必须再次加载设置文件以找出要使用的缓存...
  • @TiMESPLiNTER 我已经编辑了答案。回答过程中被打断了,抱歉。
  • 好吧听起来是最好的选择。所以基本上它只是一个 var_export() 存储在解析设置文件的 PHP 文件中。并包括那个。
【解决方案2】:

您可以根据文件扩展名确定文件类型。然后您可以读取缓存类型并创建缓存。缓存应该是单例的。

为了创建缓存,我会使用一个抽象工厂,它的实现取决于文件类型。然后抽象工厂的适当实现可以读取设置文件并创建正确的缓存。

【讨论】:

  • 并非每个缓存都存储在可检测的文件中。可能它在 memcache 或 redis 或 couchdb 中......所以不会有一个文件可以确定我的应用程序中使用的缓存类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-30
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多