将从 YAML 文件解析的 PHP 数组存储在 Symfony 的缓存中

Ped*_*iro 5 caching yaml symfony

我有几个 YAML 文件要从服务中解析。

但是在每次点击页面时,这些 YAML 文件都会被解析并转换为 PHP 数组。我知道 Symfony 会缓存默认的 YAML 文件,因此它不会在每个页面点击时解析每个 yaml 文件。

我想知道这里的最佳做法是什么。有没有办法让我的 YAML 文件只解析一次并与 Symfony2 的缓存一起存储?如果是这样,能否请我指出正确的方向?

jam*_*s_t 3

这完全取决于您想要如何进行缓存。

  • HTTP 缓存实际上仅在 Web 上下文中以及解析这些文件并将其添加到数组的操作的特定输出相对静态时才有意义。如果这两个条件都满足,那么这是最好的方法。

  • 您可以轻松地使用 APC进行缓存。它使得缓存变量的内容变得非常简单。Doctrine 提供了围绕 APC 的缓存抽象,或者您可以使用本机 PHP 函数。

在config.yml中

 services:
        cache:
            class: Doctrine\Common\Cache\ApcCache
Run Code Online (Sandbox Code Playgroud)

然后在您的控制器或服务中:

if ($yamlArray = $this->get('cache')->fetch('foo')) {
    $yamlArray = unserialize($yamlArray);
} else {
    // do the work
    $this->get('cache')->save('foo', serialize($yamlArray));
}
Run Code Online (Sandbox Code Playgroud)
  • 创建您自己的缓存服务并将其挂接到 Symfony 缓存命令中

有关创建缓存预热器的详细信息

有关 cache_clearer 的详细信息(已添加但未详细记录)。

  • 回复:但是如何检查序列化版本是否已过时,您可以将对象与“md5_file()”或“crc32()”一起存储在缓存中。例如, `$this->get('cache')->save('foo_' . md5_file($file), $yamlArray)`,然后使用 `$this->get('cache')->fetch( 'foo_' .md5_file($file))` 获取时。 (2认同)