无法从控制台清除 APCu 缓存,它在 Web 服务器内存中共享,无法从 CLI 访问

问题描述 投票:0回答:1

我正在尝试在更新实体后清除学说缓存,以便在添加新属性后不会出现这样的错误:

Uncaught Error: Typed property Project\Entities\Entity::$property must not be accessed before initialization in ...

php cli-config.php orm:clear-cache:metadata
php cli-config.php orm:clear-cache:result
工作正常,但是当我尝试执行
php cli-config.php orm:clear-cache:query
时,出现错误:

In QueryCommand.php line 43:
                                                                                                              
  Cannot clear APCu Cache from Console, it's shared in the Webserver memory and not accessible from the CLI.

如果我在 php.ini 中为 CLI 禁用 APCu,如下所示:

apc.enable_cli=0

然后

orm:clear-cache:query
结果是:

In MemcachedAdapter.php line 300:
                                                     
  MemcachedAdapter client error: connection failure

如果 APCu 不可用,Doctrine 默认使用 MemcachedAdapter。

当创建

EntityManager
并将
isDevMode
设置为 true 时,它工作正常(不会发生错误),但我不相信这是一个有效的解决方案。

new EntityManager(
    DriverManager::getConnection($params),
    ORMSetup::createAttributeMetadataConfiguration(
        paths: [__DIR__ . '/../Entities'],
        isDevMode: true, // should be false as it's production
        proxyDir: __DIR__ . '/../../../tmp',
    ),
);

版本:

  1. PHP:8.2
  2. 学说 ORM:3.1
  3. 学说DBAL:4.0

我没有使用 Symfony,只是使用普通的 Doctrine。

如何解决此问题以便我可以正确清除生产缓存?

php caching doctrine memcached apcu
1个回答
0
投票

确实,Doctrine 的官方文档指出:

这些任务均不适用于 APC、APCu 或 XCache 驱动程序 因为存储缓存的内存只能被访问 网络服务器。

然后您可以直接在网络服务器上操作在网页中使用 PHP 命令(不通过 CLI)。

这是我个人使用的代码:

$doctrine = orm_instance();
    
echo "getResultCache() CLEAR <br>";
$cacheDriver = $doctrine->em->getConfiguration()->getResultCache();
$cacheDriver->clear();
                
echo "getQueryCache() CLEAR <br>";
$cacheDriver = $doctrine->em->getConfiguration()->getQueryCache();
$cacheDriver->clear();
                
echo "getMetadataCache() CLEAR <br>";
$cacheDriver = $doctrine->em->getConfiguration()->getMetadataCache();
$cacheDriver->clear();

dump($doctrine->em);

另一种简单的方法是也在 PHP 网页中执行 APCu 本机方法。

$result = apcu_clear_cache();
dump(apcu_cache_info());
© www.soinside.com 2019 - 2024. All rights reserved.