开放的编程资料库

当前位置:我爱分享网 > Python教程 > 正文

使用 Zend Server 进行部署(第 6 部分,共 8 部分)

这是8篇文章中的第6篇文章,详细介绍了部署到ZendServer的技巧。该系列的上一篇文章详细介绍了设置作业脚本状态代码。

今天,我将分享一些关于设置页面缓存的技巧,以及清除ZendServer页面缓存的工作。

技巧6:页面缓存

ZendServer提供页面缓存。这可以按应用程序或全局定义。我通常使用全局规则,因为我最常定义服务器别名;特定于应用程序的规则仅基于主服务器名称,这使得无法缓存每个主机名。

我首先通过使用正则表达式设置规则来定义规则。例如,对于我当前的站点,我为主机准备了这个:

(www\.)?mwop.net

这允许我在有或没有www.前缀的情况下进行匹配。

之后,我为路径定义正则表达式,并确保匹配考虑到REQUEST_URI(如果不这样做,任何匹配正则表达式的页面都会缓存相同的页面!)。

当我部署或运行​​特定作业时,我通常想要清除缓存。为此,我有一个作业队列作业,在该脚本中,我使用了page_cache_remove_cached_contents()由ZendServer中的页面缓存扩展定义的函数。

这个函数接受一个参数。文档说它是一个URL,但实际上你需要提供你想要匹配的规则中的模式;然后它将清除与该规则匹配的任何页面的缓存。这意味着您必须提供完整的匹配项——包括方案、主机、端口和路径。请注意端口—绝对必须存在才能使匹配工作,即使它是给定方案的默认端口也是如此。

这意味着在我上面的示例中,page_cache_remove_cached_contents()的参数变为http://(www\\.)?mwop\\.net:80/resume。如果我同时允许HTTP和HTTPS访问,那么我还需要明确清除https://(www\\.)?mwop\\.net:443/resume。请注意,存在正则表达式转义字符,任何条件模式也是如此。

我当前的缓存清除脚本如下所示:

chdir(__DIR__ . '/../../');

if (! ZendJobQueue::getCurrentJobId()) {
    header('HTTP/1.1 403 Forbidden');
    exit(1);
}

$paths = [
    '/',
    '/resume',
];

foreach ($paths as $path) {
    page_cache_remove_cached_contents(
        'http://(www\.)?mwop\.net:80' . $path
    );
}

ZendJobQueue::setCurrentJobStatus(ZendJobQueue::OK);
exit(0);

如果我想更细化,我可以更改脚本以接受规则和URL,以通过JobQueue提供的参数清除;有关传递参数的信息,请参阅作业队列文档。

我将此脚本放入我的post_activate.php部署脚本中,但没有安排:

$queue->createHttpJob($server . '/jobs/clear-cache.php', [], [
    'name' => 'clear-cache',
    'persistent' => false,
]);

这将安排它在激活完成后立即运行。如果他们所做的应该导致刷新页面缓存,我也会将它从其他作业中排队;我这样做时使用完全相同的代码。

缓存清理注意事项

ZendServerPHPAPI提供了另一个看起来更相关和更具体的函数:page_cache_remove_cached_contents_by_uri()。此特定函数接受规则名称和您希望清除的URI,并且如文档所述,这似乎是一种将特定URI的缓存清除为规则子集的好方法,而无需清除与规则匹配的所有页面的缓存。但是,从7.0版开始,此功能无法正常工作(事实上,我无法找到任何导致缓存清除的规则和URL组合)。我建议暂时只使用page_cache_remove_cached_contents(),或者在您的框架内使用整页缓存。

下次……

本系列的下一个技巧将讨论使用ZendServerSDK从命令行部署您的应用程序。

系列其他文章

  • 技巧1:zf-deploy
  • 技巧2:重复作业
  • 技巧3:chmod
  • 技巧4:保护作业脚本
  • 技巧5:设置作业状态
  • 技巧7:zs-client
  • 技巧8:自动化
未经允许不得转载:我爱分享网 » 使用 Zend Server 进行部署(第 6 部分,共 8 部分)

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏