如何在 Zend Framework 2 的内存中缓存应用程序配置


How to cache the application configs in memory in Zend Framework 2?

Zend Framework 2 应用程序性能优化的必备条件之一是配置的缓存。这个想法是将它们合并到一个大的配置文件(或者实际上是两个文件,例如 module-classmap-cache.phpmodule-config-cache.php (,这样就不需要在每个请求时打开和合并配置文件。(请参阅官方文档中的信息以及 Rob Allen 文章"缓存 ZF2 合并配置"中的操作方法(:

application.config.php

return [
    'modules' => [
        ...
    ],
    'module_listener_options' => [
        ...
        'config_cache_enabled' => true,
        'config_cache_key' => 'app_config',
        'module_map_cache_enabled' => true,
        'module_map_cache_key' => 'module_map',
        'cache_dir' => './data/cache',
    ],
];

我想进一步优化它并从内存缓存(例如 APCu(加载配置。它是由框架提供的吗?还是我必须自己编写此功能?

缓存机制在ModuleManagerConfigListener类中实现(写入配置和读取配置的来源(。正如您在那里看到的,唯一支持的缓存方法是将缓存的配置写入文件。

它在DefaultListenerAggregate(源(中实例化为默认值,该再次在 MVC 模块(源(的ModuleManagerFactory中硬编码。

为了将其替换为您自己的逻辑,您必须:

  • 用您自己的ConfigListener替换(或至少扩展相应的部分(
  • 更改ModuleManagerFactory以在延迟创建DefaultListenerAggregate之前在上显式设置您自己的ConfigListener

虽然可行,但实际上并不值得付出努力。由于合并的配置文件是一个php文件,因此无论如何它都应该被OpCache缓存。OpCache最终是一个php优化的内存缓存。所以我希望它比任何通用内存存储都快。