Cache


Note

此页面的内容需要进行重大更新。旧页面包含过时且可能不准确的信息。您仍然可以在 Mautic Developer Documentation archived repository 中访问它。

如果您有兴趣帮助开发此页面和其他新内容的,请考虑加入文档编写工作。

请阅读 Contributing GuidelinesContributing to Mautic’s documentation 以开始您的贡献。

Symfony 广泛使用文件系统缓存。在为 Mautic 开发时,清除缓存是一个常见的操作。默认情况下,Mautic 实例的缓存位于 var/cache/ENV 中,其中 ENV 是当前访问的环境 - devprod。要重建缓存,请删除缓存目录中相应的 ENV 文件夹,或运行 Symfony 命令 php bin/console cache:clear --env=ENV。如果未将特定环境通过 --env=ENV 参数传递给命令,Mautic 将默认使用 dev 环境。

dev 环境中,Mautic 不会缓存翻译、视图和资源。但是,对这些文件的更改需要清除缓存才能使其在 prod 环境中生效。对 Mautic 配置文件、Symfony 配置文件等的更改,无论环境如何,都需要清除缓存。

通常的经验法则是,如果在进行更改后,Mautic 的行为不符合预期,请尝试清除您的缓存。如果您在使用 cache:clear 命令时遇到 “class could not be found” 或 “cannot redeclare class” 错误,请手动删除 var/cache/ENV 文件夹 - 将 ENV 替换为环境,例如 devprod - 然后运行该命令并/或浏览到站点以重建。

Cache bundle

启用 PSR-6 和 PSR-16 缓存。请参阅 Symfony Cache Component

Namespace versus tag

此模块引入了标签到缓存中。其所有适配器都完全支持标签,这使得命名空间在日常使用中变得过时。

以前,如果您想控制缓存部分并且不想保留所有键的索引以便清除,则需要使用命名空间。

这种方法的缺点是,Mautic 为每个命名空间创建一个新的适配器。

从 Symfony 3.4 开始,缓存使用支持标签的适配器。如果您想清除与您的模块或组件相关的所有记录,您只需要给它们添加标签。

/** @var CacheProvider $cache */
$cache = $this->get('mautic.cache.provider');
/** @var CacheItemInterface $item */
$item = $cache->getItem('test_tagged_Item');
$item->set('yesa!!!');
$item->tag(['firstTag', 'secondTag']);
$item->expiresAfter(20000);

您现在只需要清除所有带有标签的项目:

$cache->invalidateTags(['firstTag']);

Pools clearing

删除缓存项

Cache Pools 包含用于删除缓存项的方法,可以删除单个、部分或全部缓存项。最常用的方法是 PsrCacheCacheItemPoolInterface::deleteItem,它根据给定的键删除缓存项。

$isDeleted = $cache->deleteItem('user_'.$userId);

使用 PsrCacheCacheItemPoolInterface::deleteItems 方法可以同时删除多个缓存项 - 它仅在所有项都已成功删除时返回 true,即使某些或全部项不存在。

配置

插件默认配置为使用文件系统缓存。

以下是默认设置:

'cache_adapter' => 'mautic.cache.adapter.filesystem',
'cache_prefix' => 'app',
'cache_lifetime' => 86400

这些可以在 local.php 文件中进行覆盖,例如:

'cache_adapter'  => 'mautic.cache.adapter.redis',
'cache_prefix'   => 'app_cache',
'cache_lifetime' => 86400,

提供的适配器

  • mautic.cache.adapter.filesystem

  • mautic.cache.adapter.memcached

'cache_adapter_memcached' => [
    'servers' => ['memcached://localhost'],
    'options' => [
        'compression' => true,
        'libketama_compatible' => true,
        'serializer' => 'igbinary',
    ],
],
  • mautic.cache.adapter.redis

local.php 文件中配置 Redis:

'cache_adapter_redis' => [
    'dsn' => 'redis://localhost:6379/0',
    'options' => [
        'lazy' => false,
        'persistent' => 0,
        'persistent_id' => null,
        'timeout' => 30,
        'read_timeout' => 0,
        'retry_interval' => 0
    ],
],

要使用其他适配器,只需将其设置为服务即可。

清除缓存

cache:clear 命令用于清除 Mautic 的缓存。 使用以下命令:

bin/console mautic:cache:clear