12

出于性能原因,我希望通过 Azure CDN 提供很少更改的内容。但是,当内容确实发生变化时,更新后的数据必须立即可用,这一点很重要。理想情况下,我可以设置一个较长的 TTL,然后在我更新内容时主动告诉 CDN 使内容过期。我怎样才能做到这一点?目前没有缓存失效或清除 API,我宁愿不设置短 TTL。

4

5 回答 5

10

2015 年 12 月,Azure 团队增加了通过 REST API ( https://msdn.microsoft.com/en-us/library/mt634451.aspx ) 刷新或清除 CDN 的功能。一开始,此功能仅适用于使用新 Azure 门户 ( http://portal.azure.com ) 创建的端点,但是使用旧管理界面创建的 CDN 将在 2016 年初迁移 ( https:// /feedback.azure.com/forums/169397-cdn/suggestions/556307-ability-to-force-the-cdn-to-refresh-any-cached-con)。

于 2015-12-18T09:42:20.233 回答
8

没有使 Azure CDN 失效的 API。

解决方法:

  1. 在 Azure 门户中的 CDN 上启用“查询字符串状态”。然后您可以附加一个新的查询字符串名称和随机值,例如。/images/background.png?v=1234

  2. 使用时间戳或随机值上传并重命名新文件。例如:/images/background.20140917225200.png

  3. 设置一个较短的缓存头并等待它过期。这是 Azure 团队的一篇文章http://msdn.microsoft.com/en-us/library/azure/gg680306.aspx

于 2012-01-07T21:18:12.647 回答
1

您还可以通过 PowerShell 清除 CDN 内容:

$AzureCdnResourceGroupName = "--RESOURCE GROUP--"
$AzureCdnEndpoint = "--ENDPOINT NAME--"
$AzureCdnProfileName = "--CDN PROFILE NAME--"

#In case there's multiple subscriptions on the account
Set-AzureRmContext -SubscriptionId $AzureCdnSubscriptionId
$AzureCdnSubscriptionId = "--SUBSCRIPTION GUID--"

Write-Host "Purging CDN $AzureCdnProfileName/$AzureCdnEndpoint"

Invoke-AzureRmResourceAction `
    -ResourceGroupName $AzureCdnResourceGroupName `
    -ResourceType 'Microsoft.Cdn/profiles/endpoints' `
    -ResourceName $AzureCdnProfileName/$AzureCdnEndpoint `
    -ApiVersion '2015-06-01' `
    -Action 'Purge' `
    -Parameters @{ ContentPaths = @('/static/js/*','/static/css/*') } `
    -Force

Write-Host 'Purging completed'
于 2018-08-23T14:26:17.560 回答
1

您可以使用 az cli 清除 cdn 端点

az cdn endpoint purge是根命令

一个例子

az cdn endpoint purge -g group -n endpoint \
--profile-name profile-name \
--content-paths '/scripts/app.js' '/styles/*'

您可以在此处找到有关 cli 命令的更多信息

于 2019-08-01T01:21:25.323 回答
0

您不能强制清除 CDN。

最佳做法是将版本/日期信息附加到您的文件名,并设计您的应用程序以动态获取当前文件名。

以产品照片为例,将版本附加到 blob 名称,将 blob 名称存储在表中,然后从表中提供指向名称的链接,而不是对文件名进行硬编码。

这样,您可以在缓存标头上设置 max-expiry,Azure 只会在需要时清理过时的内容。

于 2012-02-03T16:23:06.333 回答