0

当我将图像的新版本(具有相同名称,但具有新的 Last Modified 属性)上传到 Azure 存储时,通过 URL API 调用的调整大小的版本不会更新。

直接从以下 URL 查看时会显示新图像: [redacted].blob.core.windows.net/xlenz/modified-test.jpg

但是当我查看调整大小的缓存版本时,我仍然得到旧版本: [redacted].com/cloud/xlenz/modified-test.jpg?width=700

Last-Modified: Thu, 08 May 2014 09:22:46 GMT
ETag: "ddf1d8129f6acf1:0"
Content-Type: image/jpeg
Cache-Control: public

请求图像的新未缓存版本确实会显示新版本: [redacted].com/cloud/xlenz/modified-test.jpg?width=800

Last-Modified: Thu, 08 May 2014 10:12:20 GMT
ETag: "a28693ffa56acf1:0"
Content-Type: image/jpeg
Cache-Control: public

当我将图像的新版本通过 FTP 直接发送到站点时,通过 URL API 调用的调整大小的版本会更新: [redacted].com/modified-test.jpg?width=700

我知道问题出在 DiskCache 而不是 AzureReader2,因为当我通过问题禁用 DiskCache 时<diskCache enabled="false" />,问题就消失了。

这是 DiskCache 插件中的错误吗?DiskCache 是否不查看 Azure Blob 存储中文件的上次修改日期?

我正在使用 ImageResizer、ImageResizer.Plugins.AzureReader2 和 ImageResizer.Plugins.DiskCache 的最新 3.4.2 版本。

诊断页面输出:https ://gist.github.com/anonymous/e104f8127969cedf92fd

4

2 回答 2

0

查看S3Reader2(Amazon S3 存储的等效插件),我得出的结论是它不是错误,而是缺少的功能。

S3Reader2 有一个“checkForModifiedFiles”配置设置:

如果为 true,当请求缓存文件时,S3Reader 将检查 S3 上的更新源文件。元数据在最后一次访问后缓存一小时(可通过代码配置)。如果为 false,则永远不会检查 S3 是否有较新版本的缓存文件,从而将延迟成本降低 50%。默认为假。

这正是我在 AzureReader2 中寻找的内容!

我已在 ImageResizer UserVoice 官方网站上将此作为功能请求添加: http ://resizer.uservoice.com/forums/108373-image-resizer/suggestions/5900800-add-checkformodifiedfiles-configuration-setting-l

请添加您的投票!

作为临时解决方法(在我们等待修复时),我们会将当前日期添加到 ImageResizer 请求中,这些请求会发送到每天(部分)更新的图像。

更新 2015-02-26:@nathanael-jones 在http://resizer.uservoice.com/forums/108373-image-resizer/suggestions/5900800-add-checkformodifiedfiles-configuration-setting-l上写道:“此功能已完成,并出现在 GitHub 上的 V4 和开发分支中。”

感谢投票!

于 2014-05-08T15:25:21.517 回答
0

禁用缓存后,每个请求都会从 Azure 下载源映像的新副本。

要提供基于最后修改日期的失效,您必须检查每个请求(或基于更多到期规则的缓存元数据)的 Azure。

AzureReader2不允许 DiskCache 访问 azure blob 的修改日期,因为这会使缓存的图像访问变得非常缓慢。网络延迟不容小觑:)

使用 blob 或远程存储时,最好的失效策略是完全不使用 - 将 blob 视为不可变的。这并不意味着您不能更新现有图像 URls 的响应——这只是意味着您必须在某处维护一个重写表。

于 2014-05-08T14:05:26.083 回答